SQLite
數(shù)據(jù)庫功能非常強(qiáng)大,使用起來也非常方便,SQLite數(shù)據(jù)庫的一般操作包括:創(chuàng)建數(shù)據(jù)庫、打開數(shù)據(jù)庫、創(chuàng)建表、向表中添加數(shù)據(jù)、從表中刪除數(shù)據(jù)、修改表中的數(shù)據(jù)、關(guān)閉數(shù)據(jù)庫、刪除指定表、刪除數(shù)據(jù)庫和查詢表中的某條數(shù)據(jù)。下面我們分別來學(xué)習(xí)這些基本操作。
1.創(chuàng)建和打開數(shù)據(jù)庫
在Android 中創(chuàng)建和打開一個數(shù)據(jù)庫都可以使用openOrCreateDatabase
方法來實(shí)現(xiàn),因?yàn)樗鼤詣尤z測是否存在這個數(shù)據(jù)庫,如果存在則打開,不過不存在則創(chuàng)建一個數(shù)據(jù)庫;創(chuàng)建成功則返回一個
SQLiteDatabase對象,否則拋出異常FileNotFoundException。下面我們來創(chuàng)建一個名為"Examples_06_05.db"的數(shù)據(jù)庫,并返回一個SQLiteDatabase對象
mSQLiteDatabase。
-
mSQLiteDatabase = this.openOrCreateDatabase("Example_06_05.db", MODE_PRIVATE, null);
2.創(chuàng)建表
一個數(shù)據(jù)庫中可以包含多個表,我們的每一條數(shù)據(jù)都保存在一個指定的表中,要創(chuàng)建表可以通過execSQL
方法來執(zhí)行一條SQL語句。execSQL能夠執(zhí)行大部分的SQL語句,下面我們來創(chuàng)建一個名為table1 且包含3個字段的表。
具體代碼如下:
-
String CREATE_TABLE = "CREATE TABLE table1 (_id INTEGER PRIMARY KEY, num INTEGER, data TEXT)";
-
mSQLiteDatabase.execSQL(CREATE_TABLE);
3.向表中添加一條數(shù)據(jù)
可以使用insert
方法來添加數(shù)據(jù),但是 insert 方法要求把數(shù)據(jù)都打包到 ContentValues 中, ContentValues
其實(shí)就是一個Map, key值是字段名稱, Value值是字段的值。通過 ContentValues 的 put
方法就可以把數(shù)據(jù)放到ContentValues中,然后插入到表中去。具體實(shí)現(xiàn)如下:
-
ContentValues cv = new ContentValues();
- cv.put(TABLE_NUM, 1);
- cv.put(TABLE_DATA, "測試數(shù)據(jù)");
-
mSQLiteDatabase.insert(TABLE_NAME, null, cv);
-
- //這樣同樣可以使用execSQL方法來執(zhí)行一條“插入”的SQL語句,代碼如下:
-
String INSERT_DATA = "INSERT INTO table1 (_id, num, data) values (1, 1, '通過SQL語句插入')" ;
-
mSQLiteDatabase.execSQL(INSERT_DATA);
4.從表中刪除數(shù)據(jù)
要刪除數(shù)據(jù)可以使用delete 方法,下面我們刪除字段 "_id" 等于1的數(shù)據(jù),具體代碼如下:
- mSQLiteDatabase.delete("Examples_06_05.db", " where_id="+0, null);
- 通過 execSQL方法執(zhí)行SQL語句刪除數(shù)據(jù)如下:
-
String DELETE_DATA = "DELETE FROM table1 WHERE _id=1";
-
mSQLiteDatabase.execSQL(DELETE_DATA);
5.修改表中的數(shù)據(jù)
如果添加了數(shù)據(jù)后發(fā)現(xiàn)數(shù)據(jù)有誤,這時需要修改這個數(shù)據(jù),可以使用updata方法來更新一條數(shù)據(jù)。下面我們來修改 "num"
值為0的數(shù)據(jù),具體代碼如下:
-
ContentValues cv = new ContentValues();
- cv.put(TABLE_NUM, 3);
- cv.put(TABLE_DATA, "修改后的數(shù)據(jù)");
- mSQLiteDatabase.update("table1" cv, "num " + "=" + Integer.toString(0), null);
6.關(guān)閉數(shù)據(jù)庫
關(guān)閉數(shù)據(jù)庫很重要,也是大家經(jīng)常容易忘記的。關(guān)閉的方法很簡單,直接使用SQLiteDatabase 的 close
方法。具體代碼如下:
7.刪除指定表
這里我們使用execSQL方法來實(shí)現(xiàn),具體代碼如下:
- mSQLiteDatabase.execSQL("DROP TABLE table1");
8.刪除數(shù)據(jù)庫
要刪除一個數(shù)據(jù)庫,直接使用deleteDatabase 方法即可,具體代碼如下:
- this.deleteDatabase("Examples_06_05.db");
9.查詢表中的某條數(shù)據(jù)
在Android中查詢數(shù)據(jù)是通過Cursor類來實(shí)現(xiàn)的,當(dāng)我們使用SQLiteDatabase.query()方法時,會得到一個Cursor對象,Cursor指向的就是每一條數(shù)據(jù)。它提供了很多有關(guān)查詢的方法,具體方法如下:
方法
說明
move
以當(dāng)前的位置為參考,將Cursor移動到指定的位置,成功返回true, 失敗返回false
moveToPosition
將Cursor移動到指定的位置,成功返回true,失敗返回false
moveToNext |