sqlite 数据库的实践,事务和升级数据库

来源:互联网 发布:网络三大奇书 编辑:程序博客网 时间:2024/05/21 19:23

前几天学习这个地方的时候,卡了很久。一个是因为小米手机将sql数据库优化了,无法执行adb操作进行查询数据库。可以修复,但是很麻烦,弄了很久也没弄好。

跳过这一章之后,学习contentprovider也没弄好,因为很多例子都是用的sqlite数据库的东西。

所以,学习了几天service,其实也相当于复习。后来安装了genymotion模拟器,运行起来十分流畅,也是安卓原生态,所以将那一章的内容就好好学习了一遍。

P243

下面数据库学习实践项目的总结

1 使用事务

事务的特性就是两个事件,要么都完成,要么都不完成。适用于转账这个场景,转账成功,自己的账户扣除,同时对方的账户增加金额

两个事情,都必须完成,只完成一件事情,则会出现错误。此时,事务的机制就很好,要么都完成,要么都不成功。

 

数据库更新数据也一样,删除老数据,写入新数据。如果仅仅删除了老数据,没有写入新数据,必然产生错误。

delete()方法,和insert()方法。

 

增加一个按键,进行数据替换操作

在内部添加对应的逻辑,

SQLiteDatabase db=dbHelper.getWaritableDatabase();

db.beginTransaction();

try{

db.delete("book",null,null)

if(true) throw new NullPointerException();                             

ContentValues values=new ContentValues();

values.put("name","game of thrones");

values.put("author","George Martin");

values.put("pages",720);

values.put("price",20.85);

db.insert("book",null,values);

db.setTransactionSuccessful();

}

catch(Exception e){

e.printStackTrace();

}

finally{

db.endTransaction();

}

首先启动了事务,然后执行delete,此时手动抛出一个异常,然后续代码无法执行,则最后delete是不成功的

 

讲这个手动抛出动作注释掉,事务执行才完整,有一个setTransactionSuccessful才会执行

 

2升级数据库

 

运用

SQLiteOpenHelper中的upgrade方法

在里面添加逻辑

switch(oldversion){

case 1: db.execSQL(CREATE_CATEGORY);

case 2:db.execSQL(ADD_CATEGORYID);

}

在main中实例化这个db的时候dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1);

最后那个是新的版本号,如果当前的版本号小于传入的版本号,就会执行upgrade函数

里面根据老版本号,进行对应的操作。

不加break是为了能够从任一版本升级至新版本。

 

以上均在虚拟机中跑的,效果都没什么问题。

 

 

 

 

 


 

0 0
原创粉丝点击