源地址: http://www.vogella.com/tutorials/AndroidSQLite/article.html
1.SQLite 和 Android
1.1 什么是SQLite?
SQLite是开源数据库。SQLite支持标准的关系数据库的特性,例如SQL语法,事务操作,prepared statement. 只需要很少的运行内存(大概250k),很适合嵌入到一些应用程序中。
SQLite支持的数据类型有:TEXT
(类似java
中的String
)、INTEGER
(类似java
中的long
)、和REAL
(类似java
中的double
)。所有的类型在存入数据中前必须先转换成这几种类型。数据库自己不会去检查写入的数据是否是对应的数据类型,例如,你可以讲一个integer
类型数据写入到string
条目中,相反也可以。
更多关于SQLite的信息,可以访问SQLite网站:http://www.sqlite.org
1.2 Android中的SQLite
SQLite被嵌入在每一个Android设备中。在Android中使用SQLite数据库,不需要安装也不需要管理员权限。
你只需要定义创建和更新数据库的语句。然后Android系统会自动帮你维护这个数据库。
对SQLite数据库的访问需要访问文件系统。这可能比较慢。因此推荐异步执行数据库操作。
如果你的应用创建了数据库,那么数据库被默认保存在这个目录下:DATA/data/APP_NAME/databases/FILENAME
。
上面的数据库路径会符合这么几个规则:DATA
是Environment.getDataDirectory()
方法返回的路径。APP_NAME
是应用名字。FILENAME
是你在代码中为数据库指定的名字。
2.看这篇教程的必要基础
掌握Android开发的基础知识。
3.SQLite知识结构
3.1 有关的包
android.database
包 包括所有和数据库操作相关的类。android.database.sqlite
包括和SQLite相关的类。
3.2 使用SQLiteOpenHelper
来创建和更新数据库
可以通过创建一个继承SQLiteOpenHelper
类的子类来创建和升级数据库。在类的构造函数中调用SQLiteOpenHelper
的super()
方法,指定数据库的名字和当前版本。
在这个新创建的类中,你需要覆盖这么几个方法来创建和更新数据库:
onCreate()
- 如果数据库还没有创建,会被调用。onUpgrade()
- 如果数据库版本升级会被调用。这个方法允许你更新当前数据库的机构或者删掉当前的数据库使用onCreate()
重新创建数据库。
两个方法都会收到SQLiteDatabase
对象作为参数,是数据库的java封装。
SQLiteOpenHelper
提供两个方法getReadableDatabase()
、getWriteableDatabase()
来获取SQLiteDatabase
对象,用于从数据库中读取信息或者写入数据库。
数据库表中,应该用_id
来作为键值。几个Android功能依赖这一设定。
窍门:每个表建立一个类是个很好的编程习惯。这个类定义静态的
onCreate()
方法和onUpgrade()
方法。在SQLiteOpenHelper
对应的方法中调用这些方法。这样即使你有多个表,也可以保持SQLiteOpenHelper
实现类的可读性。
3.3 SQLiteDatabase
SQLiteDatabase
是Android中操作SQLite数据库的基础类,它提供了方法去打开、查询、更新和关闭数据库。
特定的,SQLiteDatabase
提供了insert()
、update()
、delete()
等方法。
另外还提供了execSQL()
方法,来直接执行一个SQL语句。
ContentValues
对象可以用来定义键值对。键代表数据库表中某一条目的标识符,值代表数据库某一行纪录中这个条目对应的内容。ContentValues
可以用来插入或者更新数据库。
查询可以通过rawQuery()
或者query()
来完成。或者通过SQLiteQueryBuilder
类来完成。
rawQuery()
直接接受select
查询语句。
query()
提供一个指定SQL查询的接口。
SQLiteQueryBuilder
是一个很方便构建SQL查询的类。
3.4 rawQuery()示例
下面是一个rawQuery()
调用例子:
Cursor cursor = getReadableDatabase().
rawQuery("select * from todo where _id = ?", new String[] { id });
3.5 query()示例
下面是一个query()
例子:
return database.query(DATABASE_TABLE,
new String[] { KEY_ROWID, KEY_CATEGORY, KEY_SUMMARY, KEY_DESCRIPTION },
null, null, null, null, null);
方法query()
有下面这几个参数:表 1. 方法query()
的参数
参数 | 解释 |
---|---|
String dbName | 需要查询的数据库表 |
String[] columnNames | 查询需要返回的列名集合,null 表示所有列 |
String whereClause | Where-clause,也就是过滤出需要返回的条目,null 会选择所有条目 |
String[] selectionArgs | whereClause 中可能包括? 占位符,这些占位符会被selectionArgs数组中的值代替 |
String[] groupBy | 表示如何将结果分组,null 表示不分组 |
String[] |