您的位置:首页 > 移动开发 > Android开发

android数据存储—SQLite

2016-06-24 11:57 381 查看
SQLiteOpenHelper抽象类

该方法通常用4个参数的构造方法

通过得到实例后调用getWritableDatabase() || getReadableDatabase() 来创建和打开数据库!!

~~直接用栗子:

//这里是创建数据库帮助类
public class KnowDBOpenHelper extends SQLiteOpenHelper{
/*
* 创建Stories表
* */
public static final String CREATE_STORIES = "create table Stories("
+ "id_first integer primary key autoincrement"
+ "id text, "
+ "images text, "
+ "title text)";
// + "two_table integer" 版成本升级后添加的

//构造方法实例时出入的参数:第二参数:数据库名, 第三参数:null,第四参数:版本号
public KnowDBOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_STORIES);//创建stories表
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch(oldVersion){
case 1:
db.execSQL(CREATE_TWOTABLE);
case 2:
db.execSQL("alter table Book add colum two_table integer");
default:    //这里没有break! 在2版本中Book添加一列信息
}
}
}


正常的使用

//添加数据
ContentValues values = new ContentValues();
//插入第一条数据;第一个参数对应表中的列名,第二个参数,添加的数据
values.put("id",222222);
values.put("title","今天什么天气");
values.put("images","http:..22...jpg");
db.insert("Stories",null , null);
values.clear();;
//插入第二条数据
values.put("id",66666);
values.put("title","明天什么天气");
values.put("images","http:..33...jpg");
db.insert("Stories",null , null);

//更新数据
ContentValues values = new ContentValues();
values.put("title","后天什么天气");
values.put("images","http:....444...jpg");
db.update("Stories",values,"id= ?",
new String[]{"666666"});
//更新所有 id = ?的行, ?是占位符, 在后面String[ ]中提供数据
//所有意思是 更新id=666666 这一行的title变更为"后天什么天气" ,images 变更为"http:....444...jpg" !!

//删除数据
db.delete("Stories",null,null);//删除表中所有内容
db.delete("Stories","id = ?",new String[]{"222222"});//删除id = 222222这一行的所有内容!
//也可以将id更改为 >  < 符号都行!

//查询数据
//调用query()会返回一个Cursor 对象
//参数依次是:表名,指定查询的 列S,指定where的约束条件,为where的中占位符提供具体的值,指定需要group by的列, 对指定group by的后的结果进一步过滤,指定结果的排序方式
Cursor cursor = db.query("Stories",null , null,null,null,null,null);
List<Stories> list = new ArrayList<Stories>();
if(cursor.moveToFirst()){//光标移到第一行,有数据则返回true
do{
//开始遍历Cursor对象
int     id = cursor.getInt(cursor.getColumnIndex("id"));
String  title = cursor.getString(cursor.getColumnIndex("title"));
String  images = cursor.getString(cursor.getColumnIndex("images"));
Stories story = new Stories(id, title, images);
list.add(story);//将里面的每个Stories直接添加到集合中,可以返回一个集合对象
}while (cursor.moveToNext());//光标移到下一个位置,有数据则返回true!
}
cursor.close();
return   list;
}


下面方法是吧数据的操作封装起来使用的实战操作!!复用性!

public class KnowDB {
//数据库名称
public static final String DB_NAME = "myknow";
//数据库版本
public static final int VERSION = 1;

private static KnowDB knowDB;
private SQLiteDatabase db;
/*
* 构造方法私有化
* */
private KnowDB (Context context){
KnowDBOpenHelper dbOpenHelper = new KnowDBOpenHelper(context,DB_NAME, null, VERSION);
db = dbOpenHelper.getWritableDatabase();
}
/*
* 获取KnowDB实例
* */
public  synchronized static KnowDB getIntance(Context context){
if(knowDB == null){
knowDB = new KnowDB(context);
}
return  knowDB ;
}
/*
* 将stories存入数据库
* */
public void saveStories(Stories stories){
if(stories != null){
ContentValues values = new ContentValues();
values.put("id", stories.getId());
values.put("images",stories.getImages());
values.put("title",stories.getTitle());
db.insert("Stories", null , values);
}
}
/*
* 从数据库读取所有的Stories信息
* */
public List<Stories> loadStories(){
List<Stories> list = new ArrayList<Stories>();
Cursor cursor = db.query("Stories",null , null ,null ,null, null, null);
if(cursor.moveToFirst()){
do{
Stories stories = new Stories() ;
stories.setId(cursor.getInt(cursor.getColumnIndex("id")));
stories.setImages(cursor.getString(cursor.getColumnIndex("images")));
stories.setTitle(cursor.getString(cursor.getColumnIndex("title")));
list.add(stories);

}while (cursor.moveToNext());
if(cursor != null){
cursor.close();
}
}

return list;
}
/*
* 用于更新数据,删除原有的数据
* */
public void deleteStories(){
db.delete("Stories",null ,null);
}
}


数据库也可以使用事务

KnowDBOpenHelper knowHelper = new KnowDBOpenHelper(this, "Database.db", null, 1);
SQLiteDatabase db = knowHelper.getWritableDatabase();//这样数据库 和 表 都已经创建成功了
db.beginTransaction();//开启事务
try {
db.delete("Stories",null,null);
// if(true){
//         throw new NullPointerException();
// }如果这try代码中出现异常,数据是删除不成功的!!
ContentValues values = new ContentValues();
//插入第一条数据
values.put("id",45862);
values.put("title","今天什么天气");
values.put("images","http:..22...jpg");
db.insert("Stories",null , null);

db.setTransactionSuccessful();//事务已经执行成功
} catch (Exception e) {
e.printStackTrace();
}finally {
db.endTransaction();//结束事务!
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息