传智播客Android视频教程——第八天
传智播客Android视频教程——第八天
2012-04-24
17.创建数据库与完成数据添删改查
SQLite:android平台,集成了SQLite——嵌入式关系型数据库。支持NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型。虽然只支持这五种,但是实际上也接受varchar(n)、char(n)、decimal(p,s)等数据类型,只不过在运算或保存时会转换成对应的五种数据类型。
SQLite最大的特点:可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。有一种例外:定义为INTEGERPRIMARYKEY的字段只能存储64位整数,当向这种字段保存除整数以外的数据时,会产生错误。
在编写CREATETABLE语句时,可以省略跟在字段名称后面的数据类型信息。
SQLite可以解析大部分标准SQL语句。
数据分页:与mysql类似,通过limit关键字实现。
Select*fromaccountlimit5offset3orselect*fromaccountlimit3,5;
跳过前面的3条记录后,获取5条记录。
获取添加记录后自增长的ID值:selectlast_insert_rowid();
应用程序应该具有自动创建数据库功能:第一次使用软件的时候,创建出数据库。
SQLiteOpenHelper中的.getReadableDatabase()或.getWritableDatabase()
调用以上的两个方法就可以自动创建数据库。
SQLiteOpenHelper是抽象类,需要继承。
onCreate(SQLiteDatabasedb)在数据库第一次被创建的时候调用的,可用在里面生成表。
SQLiteDatabase中包含了增删查改的所有操作。
onUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion)在数据库版本号变更的时候调用的,需要在数据库中修改表结构或者字段时调用。当数据库的版本发生改变时,该方法被调用。
数据库默认保存在包//databases文件夹下。
SQLiteExpertProfessional好用的SQLite数据库管理工具。
在android中使用SQLite数据库,必须有一个默认的表android_metadata。
Android中不用为SQLite加载驱动,因为系统知道确定的数据库。
数据库的磁盘空间满了,getWritableDatabase()会出现异常。getReadableDatabase()内部也是调用了getWritableDatabase()方法,只是出现磁盘空间满了的异常,就只是执行查询操作。磁盘空间满了不能插入数据,但是还是可以读取数据的。
SQLiteDatabase专门提供了对应于添加、删除、更新、查询的操作方法:insert()、delete()、update()和query()。这些方法实际上是给那些不太了解SQL语法的人使用的,对于熟悉SQL语法的,直接使用execSQL()和rawQuery()方法执行SQL语句就能完成数据的添加、删除、更新、查询操作。
每一个测试方法执行之前都会先执行setUp()方法。
18.在SQLite中使用事务
转账:
1.updatepersonsetamount=amount-10wherepersonid=1;
2.updatepersonsetamount=amount+10wherepersonid=2;
执行两条sql语句
DBOpenHelperdbOpenHelper=newDBOpenHelper(context);
SQLiteDatabasedb=dbOpenHelper.getWritableDatebase();
开启事物:db.beginTransaction();
设置事物的标志:db.setTransactionSuccessful();
结束事物代码必须要执行,可以放在try-finally的finally中。结束事物:db.endTransaction();两种情况:commit、rollback,事物的提交或回滚是由食物的标志决定的,如果事物的标志为true,事物就会提交,否则回滚,默认情况下事物的标志为false。