Android資料儲存之SQLite 二

2021-09-01 21:11:19 字數 2660 閱讀 7683

對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是乙個開源的關聯式資料庫,可以...