14天學會安卓開發(第八天)SQLite資料庫技術
【原文:http://blog.csdn.net/corder_raine/article/details/8317223】
目錄
第八天.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, // int version,
// int mode,
// 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( new CursorFactory(){ //建立一個資料庫 //工廠類,一個可選工廠類,當查詢時呼叫來例項化一個游標 public Cursor
newCursor(SQLiteDatabase db, SQLiteCursorDriver
masterQuery, String editTable, SQLiteQuery
query) { return null ; } }); SQLiteDatabase
myDataBase= this .openOrCreateDatabase( "myDataBase.db" , MODE_PRIVATE, new CursorFactory(){ //建立新的資料庫,名稱myDatabase,模式MODE_PRIVATE,遊標工廠 //工廠類,一個可選工廠類,當查詢時呼叫來例項化一個游標 public Cursor
newCursor(SQLiteDatabase db, SQLiteCursorDriver
masterQuery, String editTable, SQLiteQuery
query) { return null ; } }); |
Ø 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
|
private SQLiteDatabase
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 = new ContentValues(); 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來檢索屬性值 int numColumn=cur.getColumnIndex( "someNumber" ); if (cur.moveToFirst()){ //cur.moveToFirst()讓遊標指向第一行,如果遊標指向第一行,則返回true do { int num=cur.getInt(numColumn); //獲得當前行該屬性的值 /*Cursor提供了不同的方法來回索不同的資料型別 例如getInt(int
index)/getString(int index)等等*/ /*做一些事情*/ }
while (cur.moveToNext()); /*遊標移動到下一行,如果遊標已經通過了結果集中的最後, 即沒有行可以移動時,則返回false*/ //其他可能移動的是previous()
和first()方法 } } |
5.5 事務處理
5.5.1 使用事務操作SQLite資料庫
使用SQLiteDatabase的beginTransaction()方法可以開啟一個事務,程式執行到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(?,?)" , new Object[]{“lxt008",
4 }); db.execSQL( "update
person set name=? where personid=?" , new Object[]{“lxt008",
1 }); db.setTransactionSuccessful(); //呼叫此方法會在執行到endTransaction()
時提交當前事務,如果不呼叫此方法會回滾事務 } finally { db.endTransaction(); //由事務的標誌決定是提交事務,還是回滾事務 } db.close(); |
上面兩條SQL語句在同一個事務中執行。
其他
Ø 資料庫輔助類
u 研究案例DatabaseDemo2
u 資料庫小工具
Sqlitebrowser可以簡單管理Sqlite資料庫示例下載
相關文章
- 14天學會安卓開發(第十二天)Android動畫技術安卓Android動畫
- 14天學會安卓開發(第十一天)Android圖形技術安卓Android
- 14天學會安卓開發(第六天)Android Service安卓Android
- 14天學會安卓開發(第七天)資料儲存之SharedPreferences與檔案安卓
- 14天學會安卓開發(第十三天)Android多媒體開發安卓Android
- 14天學會安卓開發(第四天)基礎UI控制元件安卓UI控制元件
- 14天學會安卓開發(第五天)高階UI控制元件安卓UI控制元件
- 14天學會安卓開發(第九天)ContentProvider與BroadcastReceiver安卓IDEAST
- 14天學會安卓開發(第三天)UI事件處理與佈局管理安卓UI事件
- 14天學會安卓開發(第十天)Android網路與通訊安卓Android
- 14天學會安卓開發(第一天)Android架構與環境搭建安卓Android架構
- 開源資料庫大會技術分享資料庫
- 十天學會php之第八天 (轉)PHP
- 14天學會安卓開發(第二天)Android程式設計基礎activity和intent安卓Android程式設計Intent
- 14天學會安卓開發(第十四天)Android專案案例: mp3播放器安卓Android播放器
- SQLite Expert Professional資料庫開發管理SQLite資料庫
- 大資料開發技術學習方向大資料
- Python標準庫14 資料庫 (sqlite3)Python資料庫SQLite
- Andorid SQLite資料庫開發基礎教程(3)SQLite資料庫
- Andorid SQLite資料庫開發基礎教程(2)SQLite資料庫
- Andorid SQLite資料庫開發基礎教程(1)SQLite資料庫
- iOS開發資料庫篇—SQLite常用的函式iOS資料庫SQLite函式
- Linux下mSQL資料庫開發技術(轉)LinuxSQL資料庫
- 2011資料庫技術大會資料資料庫
- 2012年4月資料庫技術大會第三天資料庫
- 安卓開發學習-Intent攜帶資料安卓Intent
- 七、資料庫技術的發展及新技術資料庫
- 軟體開發中的資料庫測試技術資料庫
- Python 快速教程(標準庫14):資料庫 (sqlite3)Python資料庫SQLite
- 2012年4月資料庫技術大會第二天資料庫
- 2012年4月資料庫技術大會第一天資料庫
- 大資料學習開發技術:MapReduce執行原理大資料
- 安卓開發日記14安卓
- 五種VC++資料庫開發技術的比較C++資料庫
- 26天學通前端開發(配資料)前端
- 144頁!分享珍藏已久的資料庫技術年刊資料庫
- 2015中國資料庫技術大會資料庫
- 2011資料庫技術大會 二資料庫