iOS 資料儲存之SQLite3的使用

2022-02-06 09:42:12 字數 3631 閱讀 7616

sqlite3是ios內嵌的資料庫,sqlite3在儲存和檢索大量資料方面非常有效,它使得不必將每個物件都加到記憶體中。還能夠對資料進行負責的聚合,與使用物件執行這些操作相比,獲得結果的速度更快。

sqlite3使用sql結構化查詢語言,sql是與關聯式資料庫互動的標準語言。

sqlite3的使用:

#import

//

建立和開啟資料庫

sqlite3 *database;

//如果sqlite3_open的結果是 sqlite_ok,表示資料庫已經開啟成功。

//sqlite3是採用可移植的c,資料庫的檔案路徑必須以c字串(非nsstring)的形式進行傳遞。

if (sqlite3_open("/path/databasefile", &database) !=sqlite_ok)

//

建立乙個新錶

nsstring *createsql = @"

create table if not exists fields ""

(row integer primary key, field_data text);";

char *errormsg;

//sqlite3_exec 針對 sqlite3 執行任何不返回資料的命令

if(sqlite3_exec (database, [createsql utf8string],

null, null, &errormsg) !=sqlite_ok)

注:sqlite3_exec 執行之後,如果值是sqlite_ok,則表明執行成功;否則,錯誤資訊儲存在errormsg中。

sqlite3_exec這個方法可以執行那些沒有返回結果的操作,例如建立、插入、刪除等。

sqlite3 *database;

if (sqlite3_open([[self datafilepath] utf8string], &database)

!=sqlite_ok)

//例子:儲存uitextfield的值到資料庫

for (int i = 0; i < 4; i++)

if (sqlite3_step(stmt) !=sqlite_done)

nsassert(

0, @"

error updating table: %s

", errormsg);

//sqlite3_finalize銷毀前面被sqlite3_prepare建立的準備語句

sqlite3_finalize(stmt);

}//sqlite3_close關閉前面使用sqlite3_open開啟的資料庫連線,任何與這個連線相關的準備語句必須在呼叫這個關閉函式之前被釋放

sqlite3_close(database);

//

建立query 和 sqlite3_stmt

nsstring *query = @"

select row, field_data from fields order by row";

sqlite3_stmt *statement;

//無論針對哪種資料,任何繫結函式的第乙個引數都指向之前在sqlite3_prepare_v2 呼叫中 使用的sqlite3_stmt

if(sqlite3_prepare_v2(database, [query utf8string],

-1, &statement, nil) ==sqlite_ok)

//sqlite3_finalize銷毀前面被sqlite3_prepare建立的準備語句

sqlite3_finalize(statement);

}//sqlite3_close關閉前面使用sqlite3_open開啟的資料庫連線,任何與這個連線相關的準備語句必須在呼叫這個關閉函式之前被釋放

sqlite3_close(database);

實際操作時經常使用叫做約束變數的東西來構造sql字串,從而進行插入、查詢或者刪除等。

例如,要執行帶兩個約束變數的插入操作,第乙個變數是int型別,第二個是c字串:

char *sql = "

insert into onetable values (?, ?);";

sqlite3_stmt *stmt;

if (sqlite3_prepare_v2(database, sql, -1, &stmt, nil) ==sqlite_ok)

if (sqlite3_step(stmt) !=sqlite_done)

nslog(

@"something is wrong!");

sqlite3_finalize(stmt);

這裡,sqlite3_bind_int(stmt, 1, 235);有三個引數:

第乙個是sqlite3_stmt型別的變數,在之前的sqlite3_prepare_v2中使用的。

第二個是所約束變數的標籤index。

第三個引數是要加的值。

有一些函式多出兩個變數,例如

sqlite3_bind_text(stmt, 2, "

valuestring

", -1, null);

這句,第四個引數代表第三個引數中需要傳遞的長度。對於c字串來說,-1表示傳遞全部字串。

第五個引數是乙個**函式,比如執行後做記憶體清除工作。

sqlite3_open():開啟資料庫,在運算元據庫之前,首先要開啟資料庫。這個函式開啟乙個sqlite資料庫檔案的連線並且返回乙個資料庫連線物件。這個操作同時程式中的第乙個呼叫的sqlite函式,同時也是其他sqlite api的先決條件。許多的sqlite介面函式都需要乙個資料庫連線物件的指標作為它們的第乙個引數。

sqlite3_prepare():將sql文字轉換成乙個準備語句(prepared statement)物件,同時返回這個物件的指標。這個介面需要乙個資料庫連線指標以及乙個要準備的包含sql語句的文字。它實際上並不執行(evaluate)這個sql語句,它僅僅為執行準備這個sql語句。

sqlite3_step():執行有前面sqlite3_prepare建立的準備語句。這個語句執行到結果的第一行可用的位置。繼續前進到結果的第二行的話,只需再次呼叫sqlite3_setp()。繼續呼叫sqlite3_setp()知道這個語句完成,那些不返回結果的語句(如:insert,update,或delete),sqlite3_step()只執行一次就返回。

sqlite3_column():執行sqlite3_step()執行乙個準備語句得到的結果集的當前行中返回乙個列。每次sqlite3_step得到乙個結果集的列停下後,這個過程就可以被多次呼叫去查詢這個行的各列的值。對列操作是有多個函式,均以sqlite3_column為字首。

sqlite3_finalize():銷毀前面被sqlite3_prepare建立的準備語句,每個準備語句都必須使用這個函式去銷毀以防止記憶體洩露。在空指標上呼叫這個函式沒有什麼影響,同時可以準備語句的生命週期的任一時刻呼叫這個函式:在語句被執行前,一次或多次呼叫sqlite_reset之後,或者在sqlite3_step任何呼叫之後不管語句是否完成執行

sqlite3_close():關閉前面使用sqlite3_open開啟的資料庫連線,任何與這個連線相關的準備語句必須在呼叫這個關閉函式之前被釋放

ios簡單使用sqlite3

sqlite是嵌入式的和輕量級的sql資料庫。sqlite是由c實現的。廣泛用於包括瀏覽器 支援html5的大部分瀏覽器,ie除外 ios android以及一些便攜需求的小型web應用系統。使用sqlite前的準備 使用sqlite是很多做ios開發中第一次面對c的情況,包括我。因為sqlite是...

iOS資料庫使用(sqlite3)

資料庫也是資料持久化的一種,但是不同於plist檔案。在ios中 使用資料庫重要的方法 1 開啟資料庫 sqlite3 open 2 建表,修改,新增,更新,刪除資料 sqlite3 exec 3 查詢 校驗語句是否合法 sqlite3 prepare v2 繫結要查詢的資料個sql語句 sqlit...

sqlite3 資料同步

在乙個小專案中,用到 sqlite3 需要同步兩個表,懶得裝工具,寫了兩個函式搞掂。貼 出來給需要的朋友。encoding utf 8 author 陳年椰子 contact hndm qq.com version 1.0 file workdb.py time 2019 6 18 17 32 說明...