sqlite是嵌入式的和輕量級的sql資料庫。sqlite是由c實現的。廣泛用於包括瀏覽器(支援html5的大部分瀏覽器,ie除外)、ios、android以及一些便攜需求的小型web應用系統。
使用sqlite前的準備
使用sqlite是很多做ios開發中第一次面對c的情況,包括我。因為sqlite是c寫的,objc可以直接使用c**。在sqlite前,一般都會使用cocoa touch框架,都是基於objc的。
首先,需要在對應檔案的標頭檔案中加入:
#import "/usr/include/sqlite3.h"並在frameworks中加入所需的庫,否則會報錯:
undefined symbols:加入庫的方法是:"_sqlite3_open", referenced from:
選擇sqlite庫:
選擇完的效果:
然後,應該有個成員變數,比如我的**:
@inte***ce detailviewcontroller : uiviewcontroller建表語句通過ssh檢視documents目錄,發現mydb檔案已經建立。sqlite的策略是如果有該檔案就開啟,如果沒有就建立檔案,也就是建立資料庫。
這裡要注意,使用的是c語法,sqlite3_open傳入的是database的位址。
關閉資料庫
資料庫使用完畢後,要關閉,比如退出應用的時候:
- (void)viewdidunload
資料庫開啟以後,如果沒有表,建表:
char *errormsg;這裡要特別注意errormsg傳的是位址,因為該函式要通過位址引用來寫報錯字元資訊。const char *createsql="create table if not exists persons (id integer primary key autoincrement,name text)";
if (sqlite3_exec(database, createsql, null, null, &errormsg)==sqlite_ok)
向表中插入記錄
和建表語句類似:
const char *insertsql="insert into persons (name) values(『張三』)";錯誤資訊的處理if (sqlite3_exec(database, insertsql, null, null, &errormsg)==sqlite_ok)
如果在多個地方使用errormsg,那麼每次使用完畢要清空一下字串,比如這樣:
if (sqlite3_exec(database, createsql, null, null, &errormsg)==sqlite_ok) else查詢結果集
結果集的查詢,需要用到statement:
const char *selectsql="select id,name from persons";不過這裡有個問題,看看列印的日誌:sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, selectsql, -1, &statement, nil)==sqlite_ok)
while (sqlite3_step(statement)==sqlite_row)
sqlite3_finalize(statement);
亂碼。因為直接用的char型別來做的。
解決辦法是,用nsstring替代char:
while (sqlite3_step(statement)==sqlite_row)char生成nsstring的時候做一次顯式的編碼。問題解決:
這說明:
使用sqlite c api,要經常參考官方函式文件:
from:
ios簡單使用sqlite3
sqlite是嵌入式的和輕量級的sql資料庫。sqlite是由c實現的。廣泛用於包括瀏覽器 支援html5的大部分瀏覽器,ie除外 ios android以及一些便攜需求的小型web應用系統。使用sqlite前的準備 使用sqlite是很多做ios開發中第一次面對c的情況,包括我。因為sqlite是...
SQLite 簡單使用
在ubuntu 12.04下進行sqlite開發簡單例項如下 1 安裝sqlite3 hadron hadron sudo apt get install sqlite sqlite3 2 檢視版本號 hadron hadron sqlite3 version 3 建立test資料庫 hadron ...
SQLite 簡單使用(一)
sqlite 使用 新增列 alter table user add column sync state integer not null default 1 建立表 create table if not exists localuser uid integer not null primary ...