参考:SQLite 教程
调用 SQLiteOpenHelper 的 getReadableDatabase() 或 getWritableDatabase() 方法会返回一个 SQLiteDatabase 对象,借助这个对象就可以对数据进行 CRUD 操作了。
一、添加数据
- insert() 方法:
- 第一个参数:表名。
- 第二个参数:用于在未指定添加数据的情况下给某些可为空的列自动赋值NULL,一般 null。
- 第三个参数:ContentValues 对象,它提供了一系列的 put() 方法重载,用于向 ContentValues 中添加数据,只需要将表中的每个列名以及相应的待添加数据传入即可。
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
// 开始组装第一条数据
values.put("name", "The Da Vinci Code");
values.put("author", "Dan Brown");
values.put("pages", 454);
values.put("price", 16.96);
db.insert("Book", null, values); // 插入第一条数据
values.clear();
// 开始组装第二条数据
values.put("name", "The Lost Symbol");
values.put("author", "Dan Brown");
values.put("pages", 510);
values.put("price", 19.95);
db.insert("Book", null, values); // 插入第二条数据
二、更新数据
- update() 方法:
- 第一个参数:表名。
- 第二个参数:ContentValues 对象。要把更新数据在这里组装进去。
- 第三、四个参数:用于去约束更新某一行或某几行中的数据,不指定的话默认就是更新所有行。
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("price", 10.99);
db.update("Book", values, "name = ?", new String[] { "The Da Vinci Code" });
第三个参数对应的是 SQL 语句的 where 部分,表示去更新所有 name 等于 ? 的行,而 ? 是一个占位符,可以通过第四个参数提供的一个字符串数组为第三个参数中的每个占位符指定相应的内容。
三、删除数据
- delete() 方法:
- 第一个参数:表名。
- 第二个参数:用于去约束删除某一行或某几行中的数据,不指定的话默认就是删除所有行。
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete("Book", "pages > ?", new String[] { "500" });
四、查询数据
- query() 方法:
- 第一个参数:表名。
- 第二个参数:指定去查询哪几列,如果不指定则默认查询所有列。
- 第三、四个参数:用于去约束查询某一行或某几行的数据,不指定则默认是查询所有行的数据。
- 第五个参数:用于指定需要去 group by 的列,不指定则表示不对查询结果进行 group by 操作。
- 第六个参数:用于对 group by 之后的数据进行进一步的过滤,不指定则表示不进行过滤。
- 第七个参数:用于指定查询结果的排序方式,不指定则表示使用默认的排序方式。
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 查询Book表中所有的数据
Cursor cursor = db.query("Book", null, null, null, null, null, null);
if (cursor.moveToFirst()) {
do {
// 遍历Cursor对象,取出数据并打印
String name = cursor.getString(cursor.getColumnIndex("name"));
String author = cursor.getString(cursor. getColumnIndex("author"));
int pages = cursor.getInt(cursor.getColumnIndex ("pages"));
double price = cursor.getDouble(cursor.getColumnIndex("price"));
Log.d("MainActivity", "book name is " + name);
Log.d("MainActivity", "book author is " + author);
Log.d("MainActivity", "book pages is " + pages);
Log.d("MainActivity", "book price is " + price);
} while (cursor.moveToNext());
}
cursor.close();
- 得到了一个 Cursor 对象。
- 接着调用它的 moveToFirst() 方法将数据的指针移动到第一行的位置。
- 然后进入了一个循环当中,去遍历查询到的每一行数据。
- 在这个循环中可以通过 Cursor 的 getColumnIndex() 方法获取到某一列在表中对应的位置索引,然后将这个索引传入到相应的取值方法中,就可以得到从数据库中读取到的数据了。
- 最后调用 close() 方法来关闭 Cursor。
五、使用 SQL 操作数据库
1. 添加数据
db.execSQL("insert into Book (name, author, pages, price) values(?, ?, ?, ?)",
new String[] { "The Da Vinci Code", "Dan Brown", "454", "16.96" });
db.execSQL("insert into Book (name, author, pages, price) values(?, ?, ?, ?)",
new String[] { "The Lost Symbol", "Dan Brown", "510", "19.95" });
2. 更新数据
db.execSQL("update Book set price = ? where name = ?", new String[] { "10.99", "The Da Vinci Code" });
3. 删除数据
db.execSQL("delete from Book where pages > ?", new String[] { "500" });
4. 查询数据
db.rawQuery("select * from Book", null);