这个总结主要对一些细节进行总结。
第一个是关于事务的用法,事务的解释,我的理解就是让一个完整的流程执行完,如果其中流程中一项事情失败了,整个事务就无法执行,最生动的例子就是银行存钱那个了。
这里主要介绍事务的三个主要方法:
beginTransaction()——开启事务,事务的开始。
TransactionSuccessful()——事务成功执行,可以理解为事务执行完毕
endTransaction()——关闭事务,结束事务
具体代码如下:
case R.id.shiwu:
/*
* 这里通过开启事务让删除数据和添加数据同时成功*/
SQLiteDatabase db4 = dbhelper.getWritableDatabase();
db4.beginTransaction();//开始事务
try {
db4.delete("Book", null, null);
if (true) {
throw new NullPointerException();
}
ContentValues values2 = new ContentValues();
values2.put("name", "jing");
values2.put("author", "jing");
values2.put("pages", 100);
values2.put("price", "66");
db4.insert("Book", null, values2);
db.setTransactionSuccessful();//事务已经成功执行
} catch (NullPointerException e) {
e.printStackTrace();
} finally {
db4.endTransaction();//结束事务
}
最理想的方式,是引入版本号的概念,每次升级数据库,就相当于更新一个新的版本,在oncreate方法里面写所有版本下的表,然后再updata方法下根据版本号判断,执行相应的表增加或者表修改。(就是如果你是第一次安装,就会直接安装oncreate方法里的所有表,一次更新到最新,如果不是,就在updata里找到自己的版本号,更新相应的内容,这个意思来理解)
OK,解释完毕后,以下是相关的代码
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BOOK);
// Toast.makeText(mcontext,"create successed",Toast.LENGTH_SHORT).show();
/*
* 在这里添加所有版本的内容,即为所有表
* 比如db.execSQL(one)
* db.execSQL(two)
* db.execSQL(three)
* db.execSQL(four)
* */
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
/*
* 这里添加每个版本号的新增内容*/
switch (oldVersion){
case 1:
db.execSQL(CREATE_BOOK);
case 2:
//db.execSQL(one)等
case 3:
//db.execSQL("alter table Book add column category_id integer") 新增表里的数据
default:
}