對sqlitedatabase的學習,應該重點掌握execsql()和rawquery()方法。execsql()方法可以執行insert delete update等有更改行為的sql語句,rawquery()方法用於執行select語句。
//獲取資料庫操作例項
sqlitedatabase db = ....;
db.execsql("insert into person(name, age) values('hu',22)");
db.close();
執行上面sql語句會往person表中新增進一條記錄,在實際應用中,語句中的「hu」這些引數值可能會由使用者輸入介面提供,如果把使用者輸入的內容原樣組拼到上面的insert語句,當使用者輸入的內容含有單引號時,組拼出來的sql語句就會存在語法錯誤。要解決這個問題需要對單引號進行轉義,也就是把單引號轉換成兩個單引號。有些時候使用者往往還會輸入像「 & 」這些特殊sql符號,為保證組拼好的sql語句語法正確,必須對sql語句中的這些特殊sql符號都進行轉義,顯然,對每條sql語句都做這樣的處理工作是比較煩瑣的。sqlitedatabase類提供了乙個過載後的[color=red]execsql(string sql, object bindargs)[/color]方法,使用這個方法可以解決前面提到的問題,因為這個方法支援使用[color=red]佔位符引數(?)[/color]。
sqlitedatabase db = ....;
db.execsql("insert into person(name, age) values(?,?)", new object);
db.close();
execsql(string sql, object bindargs)方法的第乙個引數為sql語句,第二個引數為sql語句中佔位符引數的值,引數值在陣列中的順序要和佔位符的位置對應。
sqlitedatabase的rawquery()用於執行select語句。
sqlitedatabase db = ....;
cursor cursor = db.rawquery(「select * from person」, null);
while (cursor.movetonext())
cursor.close();
db.close();
rawquery()方法的第乙個引數為select語句;第二個引數為select語句中佔位符引數的值,如果select語句沒有使用佔位符,該引數可以設定為null。帶佔位符引數的select語句使用:
cursor cursor = db.rawquery("select * from person where name like ? and age=?", new string);
cursor是結果集游標,用於對結果集進行隨機訪問,如果熟悉jdbc,其實cursor與jdbc中的resultset作用很相似。使用movetonext()方法可以將游標從當前行移動到下一行,如果已經移過了結果集的最後一行,返回結果為false,否則為true。另外cursor 還有常用的movetoprevious()方法(用於將游標從當前行移動到上一行,如果已經移過了結果集的第一行,返回值為false,否則為true),movetofirst()方法(用於將游標移動到結果集的第一行,如果結果集為空,返回值為false,否則為true)和movetolast()方法(用於將游標移動到結果集的最後一行,如果結果集為空,返回值為false,否則為true)
[color=red]另外sqlitedatabase支援事務操作:[/color]
使用sqlitedatabase的begintransaction()方法可以開啟乙個事務,程式執行到endtransaction()方法時會檢查事務的標誌是否為成功,如果程式執行到endtransaction()之前呼叫了[color=red]settransactionsuccessful()[/color]方法設定事務的標誌為成功則提交事務,如果沒有呼叫settransactionsuccessful()方法則回滾事務。
sqlitedatabase db = ....;
db.begintransaction();//開始事務
try );
db.execsql("update person set name=? where personid=?", new object);
//呼叫此方法會在執行到endtransaction() 時提交當前事務,如果不呼叫此方法會回滾事務
db.settransactionsuccessful();
} finally
db.close();
上面兩條sql語句在同乙個事務中執行。
及時關閉資料庫:
第一次呼叫getwritabledatabase()或getreadabledatabase()方法後,sqliteopenhelper會快取當前的sqlitedatabase例項,sqlitedatabase例項正常情況下會維持資料庫的開啟狀態,所以在你不再需要sqlitedatabase例項時,請及時呼叫close()方法釋放資源。一旦sqlitedatabase例項被快取,多次呼叫getwritabledatabase()或getreadabledatabase()方法得到的都是同一例項。
Android之資料儲存
概述 1.android中包含5中資料儲存方式 sharedpreferences儲存資料。contentprovider儲存 檔案儲存 sqllite資料庫儲存 網路儲存 preference file database 這三種方式分別對應的目錄是 data data package name s...
android之資料儲存之SQLite
sqlite開源輕量級資料庫,支援92 sql標準,主要用於嵌入式系統,只佔幾百k系統資源此外,sqlite 不支援一些標準的 sql 功能,特別是外來鍵約束 foreign key constrains 巢狀 transcaction 和 right outer join 和 full outer...
Android 資料儲存之Files
android中一共提供了四種資料儲存方式 shared preferences主要用於系統配置資訊的儲存,比如使用者登入時,輸入了使用者名稱密碼,下次登入時保留這一次的輸入內容。files就是把需要儲存的東西都存到檔案中,需要時,則通過讀取這個檔案來獲取。sqlite是乙個開源的關聯式資料庫,可以...