SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。
本文主要讲解 SQLite 在 Android 环境中的基本使用。
SQLite 基本上符合 SQL-92 标准,和其他的主要 SQL 数据库没什么区别。它的优点就是高效,Android 运行时环境包含了完整的 SQLite。
Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库。
首先创建数据库
Android 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后进行创建表、索引,填充数据等操作。
Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。
下面示例代码展示了如何继承 SQLiteOpenHelper 创建数据库:
public class DatabaseHelper extends
SQLiteOpenHelper
{
DatabaseHelper(
Context
context
,
String
name
,
CursorFactory
cursorFactory
,
int
version)
{
super(
context
,
name
,
cursorFactory
,
version);
}
@Override
public void onCreate(
SQLiteDatabase
db)
{
// TODO 创建数据库后,对数据库的操作
}
@Override
public void onUpgrade(
SQLiteDatabase
db
,
int
oldVersion
,
int
newVersion)
{
// TODO 更改数据库版本的操作
}
@Override
public void onOpen(
SQLiteDatabase
db)
{
super
.
onOpen(
db);
// TODO 每次成功打开数据库后首先被执行
}
}
接下来讨论具体如何创建表、以及对数据的增删改查等等。
/*
* 重新建立数据表
*/
private void CreateTable()
{
SQLiteDatabase
db
=
mOpenHelper
.
getWritableDatabase();
String
sql
=
"CREATE TABLE "
+
TABLE_NAME
+
" ("
+
TITLE
+
" text not null, "
+
BODY
+
" text not null "
+
");";
Log
.
i(
"yilee:createDB="
,
sql);
try {
db.execSQL("DROP TABLE IF EXISTS diary");
db.execSQL(sql);
setTitle("数据表成功重建");
} catch (SQLException e) {
setTitle("数据表重建错误");
}
}/*
* 删除数据表
*/
private void dropTable() {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
String sql = "drop table " + TABLE_NAME;
try {
db.execSQL(sql);
setTitle("数据表成功删除:" + sql);
} catch (SQLException e) {
setTitle("数据表删除错误");
}
}/*
* 插入两条数据
*/
private void insertItem() {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
String sql = "insert into " + TABLE_NAME + " (" + TITLE + ", " + BODY
+ ") values(‘yilee’, ‘异泪的博客’);";
try {
Log.i("yilee:sql1=", sql);
db.execSQL(sql);
setTitle("插入数据成功");
} catch (SQLException e) {
setTitle("插入数据失败");
}
}/*
* 删除其中的一条数据
*/
private void deleteItem() {
try {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
db.delete(TABLE_NAME, " title = ‘yilee’", null);
setTitle("删除title为yilee的一条记录");
} catch (SQLException e) {
setTitle("删除数据失败");
}
}/*
* 在屏幕的title区域显示当前数据表当中的数据的条数。
*/
private void showItems() {SQLiteDatabase db = mOpenHelper.getReadableDatabase();
String col[] = { TITLE, BODY };
Cursor cur = db.query(TABLE_NAME, col, null, null, null, null, null);
Integer num = cur.getCount();
setTitle(Integer.toString(num) + " 条记录");
}
最后一个方法中使用了Cursor类:
不管你如何执行查询,都会返回一个 Cursor,这是 Android 的 SQLite 数据库游标,使用游标,你可以:
通过使用 getCount() 方法得到结果集中有多少记录;
通过 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍历所有记录;
通过 getColumnNames() 得到字段名;
通过 getColumnIndex() 转换成字段号;
通过 getString(),getInt() 等方法得到给定字段当前记录的值;
通过 requery() 方法重新执行查询得到游标;
通过 close() 方法释放游标资源;