14天學會安卓開發(第八天)SQLite資料庫技術

查志強發表於2014-06-25

【原文:http://blog.csdn.net/corder_raine/article/details/8317223

14天學會安卓開發  
作者:神祕的N (英文名  corder_raine)
聯絡方式:369428455(反饋)
交流群:284552167(示例,原文件下載)
版權為作者所有,如有轉載請註明出處
目錄

第八天.SQLite資料庫技術... 87

8.1 SQLite介紹

8.1.1資料庫儲存... 87
8.1.2 SQLite介紹... 87

8.2 建立/開啟/刪除資料庫... 87

8.2.1 建立資料庫... 87
8.2.2 其他建立資料庫的方法... 88
8.2.3 刪除資料庫... 88
8.2.4 開啟資料庫... 89
8.2.5 非查詢SQL指令... 89

8.3 建立/刪除表... 89

8.3.1 SQLite基礎案例... 89
8.3.2 SQLite基礎案例:更新檢視顯示... 90

8.4 CRUD操作

5.5 事務處理... 91

5.5.1 使用事務操作SQLite資料庫... 91

第八天.SQLite資料庫技術
8.1 SQLite介紹     
8.1.1資料庫儲存
Ø    在某些情況下,檔案不是有效的
u  多執行緒資料訪問
u  需要事務處理
u  如果應用程式處理可能變化的複雜資料結構
u  資料庫對於建立它們的包套件是私有的
8.1.2 SQLite介紹
Ø  SQLite是一個輕量級的資料庫,體積大小隻用幾千位元組
Ø  一些SQL的指令只是部分支援,例如:ALTER、TABLE
Ø  廣泛應用在嵌入式移動裝置之上。
Ø  參閱http://www.sqlite.org 獲取更多資訊

8.2 建立/開啟/刪除資料庫    
  8.2.1 建立資料庫
1
2
3
4
5
6
  Context.createDatabase(
String name, //
intversion, //
intmode, //
CursorFactory factory //
)
Ø  建立一個新的資料庫並返回一個SQLiteDatabase物件
Ø  資料庫不能被建立,則丟擲FileNotFoundException異常
8.2.2 其他建立資料庫的方法
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
SQLiteDatabase mydataBase=SQLiteDatabase.create(newCursorFactory(){
//建立一個資料庫
//工廠類,一個可選工廠類,當查詢時呼叫來例項化一個游標
publicCursor newCursor(SQLiteDatabase db,
SQLiteCursorDriver masterQuery, String editTable,
SQLiteQuery query) {
returnnull;
}
});
SQLiteDatabase myDataBase=this.openOrCreateDatabase("myDataBase.db",
MODE_PRIVATE,newCursorFactory(){
//建立新的資料庫,名稱myDatabase,模式MODE_PRIVATE,遊標工廠
//工廠類,一個可選工廠類,當查詢時呼叫來例項化一個游標
publicCursor newCursor(SQLiteDatabase db,
SQLiteCursorDriver masterQuery, String editTable,
SQLiteQuery query) {
returnnull;
}
});
8.2.3 刪除資料庫
Ø  Context.deleteDatabase(String name)
u  刪除指定名稱的資料庫
u  假如資料庫成功刪除則返回true,失敗則為false

8.2.4 開啟資料庫
Ø  Context.openDatabase(String file,CursorFactory factory)
u  開啟一個存在的資料庫並返回一個SQLiteDatabase 物件
u  如果資料庫不存在則丟擲FileNotFoundException 異常
u  如建立一個名為:myDataBase的資料庫,字尾為.db

1
2
3
4
5
SQLiteDatabase       my_DataBase=
             this.openOrCreateDatabase(
                    "myDateBase.db",
                    MODE_PRIVATE,null);
 my_DataBase.close();//不要忘記關閉資料庫


8.2.5 非查詢SQL 指令
Ø  SQLiteDatabase.execSQL(String sql)
u  可以用來執行非查詢SQL指令,這些指令沒有結果, 包括:CREATE TABLE / DROP TABLE / INSERT 等等。

8.3 建立/刪除表
8.3.1 SQLite基礎案例
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
privateSQLiteDatabase mSQLiteDatabase=null;
// 開啟已經存在的資料庫
mSQLiteDatabase = this.openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null);
/* 在資料庫mSQLiteDatabase中建立一個表 */
mSQLiteDatabase.execSQL(CREATE_TABLE);
/* 刪除資料庫 */
this.deleteDatabase(DATABASE_NAME);
/* 退出時,不要忘記關閉 */
mSQLiteDatabase.close();
/* 刪除一個表 */
mSQLiteDatabase.execSQL("DROP TABLE " + TABLE_NAME);
/* 更新一條資料 */
ContentValues cv = newContentValues();
cv.put(TABLE_NUM, miCount);
cv.put(TABLE_DATA,"修改後的資料"+ miCount);
mSQLiteDatabase.update(TABLE_NAME, cv, TABLE_NUM + "="+ Integer.toString(miCount - 1),null);
UpdataAdapter();//更新介面


01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
/* 向表中新增一條資料 */
       ContentValues cv = new ContentValues();
       cv.put(TABLE_NUM, miCount);
       cv.put(TABLE_DATA, "測試資料庫資料" + miCount);
       mSQLiteDatabase.insert(TABLE_NAME, null, cv);
       miCount++;
       UpdataAdapter(); //更新介面
       
       /* 從表中刪除指定的一條資料 */
       mSQLiteDatabase.execSQL("DELETE FROM " + TABLE_NAME + " WHERE _id=" + Integer.toString(miCount));
       miCount--;
       if(miCount < 0){
              miCount = 0;
       }
       UpdataAdapter();//更新介面



8.3.2 SQLite基礎案例:更新檢視顯示
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
/* 更新檢視顯示 */
public void UpdataAdapter(){
              // 獲取資料庫Phones的Cursor
              Cursor cur = mSQLiteDatabase.query(TABLE_NAME, new String[] { TABLE_ID, TABLE_NUM, TABLE_DATA }, null, null, null, null, null);
              miCount = cur.getCount();
              if (cur != null && cur.getCount() >= 0) {
                     // ListAdapter是ListView和後臺資料的橋樑
                     ListAdapter adapter = new SimpleCursorAdapter(this,
                     // 定義List中每一行的顯示模板
                            // 表示每一行包含兩個資料項
                            android.R.layout.simple_list_item_2,
                            // 資料庫的Cursor物件
                            cur,
                            // 從資料庫的TABLE_NUM和TABLE_DATA兩列中取資料
                            new String[] { TABLE_NUM, TABLE_DATA },
                            // 與NAME和NUMBER對應的Views
                            new int[] { android.R.id.text1, android.R.id.text2 });
                     /* 將adapter新增到m_ListView中 */
                     m_ListView.setAdapter(adapter);
              } }
** 研究案例DatabaseDemo1
8.4 CRUD操作
8.4.1 查詢SQL 指令-遊標Cursors
Ø  Android 使用遊標(Cursors)來導航瀏覽查詢結果
Ø  遊標(Cursors)被android.database.Cursor 物件來描述
Ø  一個遊標(Cursors)是一個簡單的指標,它從查詢結果的一個元組跳到下一個元組(或前一個或第一個……)
Ø  遊標(Cursors)在它定位位置的那一刻返回元組資料


01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
//為建立Cursor(遊標),必須執行查詢,要麼通過SQL使用rawQuery()方法
//或是更精心設計的方法,像query()方法
Cursor cur=my_DataBase.rawQuery("SELECT * FORM test",null);
if(cur!=null){//遊標不為空
//返回給定名稱的列的基於0開始的index,如果該屬性列不存在則返回-1
//通過它們的index來檢索屬性值
intnumColumn=cur.getColumnIndex("someNumber");
if(cur.moveToFirst()){
//cur.moveToFirst()讓遊標指向第一行,如果遊標指向第一行,則返回true
do{
intnum=cur.getInt(numColumn);//獲得當前行該屬性的值
/*Cursor提供了不同的方法來回索不同的資料型別
例如getInt(int index)/getString(int index)等等*/
/*做一些事情*/
} while (cur.moveToNext());
/*遊標移動到下一行,如果遊標已經通過了結果集中的最後,
即沒有行可以移動時,則返回false*/
//其他可能移動的是previous() 和first()方法
}
}

5.5 事務處理
5.5.1 使用事務操作SQLite資料庫
使用SQLiteDatabasebeginTransaction()方法可以開啟一個事務,程式執行到endTransaction() 方法時會檢查事務的標誌是否為成功,如果為成功則提交事務,否則回滾事務。當應用需要提交事務,必須在程式執行到endTransaction()方法之前使用setTransactionSuccessful() 方法設定事務的標誌為成功,如果不呼叫setTransactionSuccessful() 方法,預設會回滾事務。使用例子如下:
01
02
03
04
05
06
07
08
09
10
SQLiteDatabase db = ....;
db.beginTransaction();//開始事務
try{
    db.execSQL("insert into person(name, age) values(?,?)",newObject[]{“lxt008", 4});
    db.execSQL("update person set name=? where personid=?",newObject[]{“lxt008", 1});
    db.setTransactionSuccessful();//呼叫此方法會在執行到endTransaction() 時提交當前事務,如果不呼叫此方法會回滾事務
}finally{
    db.endTransaction();//由事務的標誌決定是提交事務,還是回滾事務
}
db.close();
上面兩條SQL語句在同一個事務中執行。


其他

Ø  資料庫輔助類
u  研究案例DatabaseDemo2
u  資料庫小工具
Sqlitebrowser可以簡單管理Sqlite資料庫

示例下載

相關文章