sqlite 数据库的实践,事务和升级数据库
2015-09-11 23:51
309 查看
前几天学习这个地方的时候,卡了很久。一个是因为小米手机将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是为了能够从任一版本升级至新版本。
以上均在虚拟机中跑的,效果都没什么问题。
跳过这一章之后,学习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是为了能够从任一版本升级至新版本。
以上均在虚拟机中跑的,效果都没什么问题。
相关文章推荐
- mysql小记
- Navicat 2003-can't connect to MYSQL server on 'localhost'(10061)
- oracle中删除表空间提示ORA-00604和ORA-38301
- 下载安装oracle11g
- Can t connect to MySQL server on 解决方法
- 数据库 之 入门篇
- Sqlite3笔记
- MySQL表的四种分区类型
- LNMP系列——Mysql生产环境配置
- oracle错误-ORA-12519, TNS:no appropriate service handler found
- redis常用命令、常见错误、配置技巧
- 关于Oracle 12c 和 odbc的一点注意。
- sqlserver分页;mysql分页;orcale分页 的sql 查询语句
- Oracle错误 1053: 该服务没有响应启动或控制请求
- zabbix 监控 mysql
- 数据处理之PostgreSQL过程语言学习
- 修改mysql用户密码
- SQL删除数据总结
- Oracle学习笔记20150911pl/sql编程
- SQL