当前位置:首页 > 安卓-Junit-文件存储-XML解析方式-数据库-ListView-内容提供者-观察者
中的数据库
安卓中使用的数据库都是SQLite数据库,SQLite中的一个数据库就是一个文件 安卓SDK中提供了一套操作SQLite的API。
SQLite特点
?
Android平台中嵌入了一个关系型数据库SQLite,和其他数据库不同的是SQLite存储数据时不区分类型
例如一个字段声明为Integer类型,我们也可以将一个字符串存入,一个字段声明为布尔型,我们也可以存入浮点数。 除非是主键被定义为Integer,这时只能存储64位整数
?
创建数据库的表时可以不指定数据类型,例如:
CREATE TABLE person(id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(20)) CREATE TABLE person(id INTEGER PRIMARY KEY AUTOINCREMENT, name)
?
SQLite支持大部分标准SQL语句,增删改查语句都是通用的,分页查询语句和MySQL相同
SELECT * FROM person LIMIT 20 OFFSET 10 SELECT * FROM person LIMIT 10,20
?
和JDBC访问数据库不同,操作SQLite数据库无需加载驱动,不用获取连接,直接可以使用
获取SQLiteDatabase对象之后通过该对象直接可以执行SQL语句 SQLiteDatabase.execSQL() SQLiteDatabase.rawQuery()
通过SQLiteOpenHelper.getWritableDatabase();方式创建的数据库默认保存在:/data/data/ 目录下
创建数据库与表的步骤
1、 创建一个类继承SQLiteOpenHelper,这会实现两个方法,且要显示写一个构造函数
构造函数,就是用来调用父类的构造函数来创建或打开数据库用的
2、 在onCreate()方法是数据库第一次创建的时候自动执行的,在这里写上创建表的语句 3、 onUpgrade()方法是数据库版本升级的时候自动调用的
4、 写一个测试类继承AndroidTestCast,调用刚刚创建的类的getWritableDatabase();方法即可以获取到一个可写的数据库对象(SQLiteDatabase)。
SQLiteDatabase对象就有增、删、改、查的方法。通过查看getWritableDatabases()方法的源代码可以了解到获取数据库的原理。
具体代码在:10.SQLite项目中的
com.itheima.sqlite包:DBOpenHelper文件、BTest文件。
SQLite的增删改查方式一
---------------使用SQLiteDatabase的execSQL()方法和rawQuery( )方法
具体代码(包括分页查询)在:10.SQLite项目中的:
com.itheima.sqlite包:BOpenHelper文件
com.itheima.sqlite.domain包:Person文件
com.itheima.sqlite.dao包:PersonDaoClassic文件 com.itheima.sqlite.test包:DBTest文件。
关于getWritableDatabase()和getReadableDatabase()的区别
1、getWritableDatabase()获取到的数据库并不是只能写,它也能读
2、 getReadableDatabase()这也不是说获取只能读的数据库,执行方法时,方法内部会先调用:getWritableDatabase(),
如果获取不到可写的数据库才去获取一个只能读的数据库。
SQLite的增删改查方式二
---------------使用SQLiteDatabase的insert( )、update( )、delete( )方法和query( )方法
使用几个增删改查的方法好处是省略了写SQL关键字,只需指定要操作的表名,字段名,值,条件等即可。
具体代码(包括分页查询)在:10.SQLite项目中的:
com.itheima.sqlite包:BOpenHelper文件 com.itheima.sqlite.domain包:Person文件 com.itheima.sqlite.dao包:PersonDao文件 com.itheima.sqlite.test包:DBTest文件。
关于数据库的总结:
-------------总结所用到的类的功能
SQLiteOpenHelper:要想创建或者得到一个数据库,必须要创建一个类继承它,通过创建的个类可以得到一个数据库(即SQLiteDatabase对象),
并且可以在这个类的onCreate()生命周期方法里创建数据库表;
SQLiteDatabase: 这个类提供了增删改查的方法。其中查的方法返回的是一个Cursor对象 Cursor:这个类用来保存查数据库时返回的一条一条的记录,该对象提供了获取这些记录的方法 ContentValues:相当于Map,是用于保存键值对,用于在SQLite的增删改查方式二中需要指定的值。
事务管理
?
在使用SQLite数据库时可以用SQLiteDatabase类中定义的相关方法控制事务
beginTransaction() 开启事务
setTransactionSuccessful() 设置事务成功标记 endTransaction() 结束事务
?
endTransaction()需要放在finally中执行,否则事务只有到超时的时候才自动结束,会降低数据库并发效率
共分享92篇相关文档