1:SQLite事务处理
使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务。事务处理应用:很多时候我们需要批量的向Sqlite中插入大量数据时,单独的使用添加方法导致应用响应缓慢, 因为sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘操作。如初始8000条记录也就是要8000次读写磁盘操作。同时也是为了保证数据的一致性,避免出现数据缺失等情况。
重要方法:
beginTransaction();
setTransactionSuccessful();
endTransaction();
例子:
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
db.beginTransaction();//开启事务
try{
//批量处理操作
db.execSQL("SQL语句", new Object[]{});
db.execSQL("SQL语句", new Object[]{});
db.setTransactionSuccessful();//设置事务标志为成功,当结束事务时就会提交事务
}catch(Exception e){
}finally{
//结束事务
db.endTransaction();
}
2:基本使用
SELECT * FROM test; //从test数据库中选取所有列内容
SELECT testid,time FROM test;//从test数据库中选取 testid 和 time 列内容
SELECT testid FROM test;////从test数据库中选取 testid 列内容
INSERT INTOtest(testid, time) VALUES ('1',xxxxxxx);//插入一行数据
DELETE * FROM test;//删除所有数据
DELETE FROM test WHERE testid ='2';//删除testid ='2'的行数据
3 数据库升级
我们在开发Android应用的时候,不可避免地要使用数据库。而数据库的结构在第一版的时候定下来,之后发布功能更新,或增加业务逻辑,原来的数据库结构可能就不适用了。而如果数据库的结构与之前版本的结构不同,新版本的应用读取旧数据库肯定会出问题。这里就按照Sqlite来处理.
这里就需要了解 onCreate和onUpgrade分别在什么时候执行
4 onCreate 只会执行一次
比如你第一次的VERSION 是1后来新用户安装你最近的APK安装包,你的数据版本 VERSION 直接升级为2,因为用户之前没有安装软件,所以只会走onCreate ,如果用户之前安装过就会走onUpgrade的方法
5.所以我们新的数据库逻辑也要在onCreate方法中执行,也要在onUpgrade中执行,确保老用户和新用户都能使用,
6.如果只是增加一张表,那么直接在onCreate和onUpgrade中执行创建表的逻辑就行。
7.如果修改已有表:
将现有表重命名为临时表
创建新表
将临时表的数据导入新表(注意处理修改的列)
删除临时表。
这样就是升级现有表结构方法,如果用户安装了新的安装包,不卸载直接安装之前就会
Caused by: android.database.sqlite.SQLiteException: Can't downgrade database from version 2 to 1
其实,如果我们只是想在某个之前的表上多增加一个字段执行使用插入语句就可以了;
//从版本1到版本2时,增加了一个字段 desc
Stringsql ="alter table ["+TABLE_NAME+"] add [desc] nvarchar(300)"; db.execSQL(sql);