iphone開發(fā)中sqlite3的操作說明(轉(zhuǎn)載)

1 首先獲取iPhone上sqlite3的數(shù)據(jù)庫(kù)文件的地址

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *path = [documentsDirectory stringByAppendingPathComponent:@"database_name"];

2打開iPhone上的sqlite3的數(shù)據(jù)庫(kù)文件

sqlite3 *database;

sqlite3_open([path UTF8String], &database);

3 準(zhǔn)備sql文---sql語句

sqlite3_stmt *stmt;

const char *sql = "SELECT * FROM table_name WHERE pk=? and name=?";

sqlite3_prepare_v2(database,sql, -1, &stmt, NULL);

4邦定參數(shù)

// 邦定第一個(gè)int參數(shù)

sqlite3_bind_int(stmt, 1, 1);

// 邦定第二個(gè)字符串參數(shù)

sqlite3_bind_text(stmt, 2, [title UTF8String], -1, SQLITE_TRANSIENT);

5執(zhí)行sql文

sqlite3_step(stmt);

6釋放sql文資源

sqlite3_finalize(stmt);

7關(guān)閉iPhone上的sqlite3的數(shù)據(jù)庫(kù)

sqlite3_close(database);

http://hi.baidu.com/clickto/blog/item/0c6904f787c34125720eec87.html

以下演示一下使用sqlite的步驟鳄抒,先創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),然后查詢其中的內(nèi)容。2個(gè)重要結(jié)構(gòu)體和5個(gè)主要函數(shù):

sqlite3? ? ? ? ? ? ? *pdb, 數(shù)據(jù)庫(kù)句柄舀凛,跟文件句柄FILE很類似

sqlite3_stmt? ? ? *stmt, 這個(gè)相當(dāng)于ODBC的Command對(duì)象匹中,用于保存編譯好的SQL語句

sqlite3_open(),? 打開數(shù)據(jù)庫(kù)

sqlite3_exec(),? 執(zhí)行非查詢的sql語句

sqlite3_prepare(), 準(zhǔn)備sql語句宏怔,執(zhí)行select語句或者要使用parameter bind時(shí)坊谁,用這個(gè)函數(shù)(封裝了sqlite3_exec).

Sqlite3_step(), 在調(diào)用sqlite3_prepare后篓吁,使用這個(gè)函數(shù)在記錄集中移動(dòng)。

Sqlite3_close(), 關(guān)閉數(shù)據(jù)庫(kù)文件

還有一系列的函數(shù)削咆,用于從記錄集字段中獲取數(shù)據(jù)牍疏,如

sqlite3_column_text(), 取text類型的數(shù)據(jù)。

sqlite3_column_blob()拨齐,取blob類型的數(shù)據(jù)

sqlite3_column_int(), 取int類型的數(shù)據(jù)

PreparedStatement方式處理SQL請(qǐng)求的過程

特點(diǎn):可以綁定參數(shù)鳞陨,生成過程。執(zhí)行的時(shí)候像是ADO一樣瞻惋,每次返回一行結(jié)果炊邦。

1. 首先建立statement對(duì)象:

int sqlite3_prepare(

sqlite3 *db,? ? ? ? ? ? /* Database handle */

const char *zSql,? ? ? /* SQL statement, UTF-8 encoded */

int nBytes,? ? ? ? ? ? /* Length of zSql in bytes. */

sqlite3_stmt **ppStmt,? /* OUT: Statement handle */

const char **pzTail? ? /* OUT: Pointer to unused portion of zSql */

);

2. 綁定過程中的參數(shù)(如果有沒有確定的參數(shù))

int sqlite3_bind_xxxx(sqlite3_stmt*, int, ...);

第二個(gè)int類型參數(shù)-表示參數(shù)的在SQL中的序號(hào)(從1開始)。

第三個(gè)參數(shù)為要綁定參數(shù)的值熟史。

對(duì)于blob和text數(shù)值的額外參數(shù):

第四參數(shù)是字符串(Unicode 8or16)的長(zhǎng)度馁害,不包括結(jié)束'\0'。

第五個(gè)參數(shù)蹂匹,類型為void(*)(void*)碘菜,表示SQLite處理結(jié)束后用于清理參數(shù)字符串的函數(shù)。

沒有進(jìn)行綁定的未知參數(shù)將被認(rèn)為是NULL限寞。

3. 執(zhí)行過程

int sqlite3_step(sqlite3_stmt*);

可能的返回值:

*SQLITE_BUSY:? 數(shù)據(jù)庫(kù)被鎖定忍啸,需要等待再次嘗試直到成功。

*SQLITE_DONE:? 成功執(zhí)行過程(需要再次執(zhí)行一遍以恢復(fù)數(shù)據(jù)庫(kù)狀態(tài))

*SQLITE_ROW:? ? 返回一行結(jié)果(使用sqlite3_column_xxx(sqlite3_stmt*,, int iCol)得到每一列的結(jié)果履植。

再次調(diào)用將返回下一行的結(jié)果计雌。

*SQLITE_ERROR:? 運(yùn)行錯(cuò)誤,過程無法再次調(diào)用(錯(cuò)誤內(nèi)容參考sqlite3_errmsg函數(shù)返回值)

*SQLITE_MISUSE: 錯(cuò)誤的使用了本函數(shù)(一般是過程沒有正確的初始化)

4. 結(jié)束的時(shí)候清理statement對(duì)象

int sqlite3_finalize(sqlite3_stmt *pStmt);

應(yīng)該在關(guān)閉數(shù)據(jù)庫(kù)之前清理過程中占用的資源玫霎。

5. 重置過程的執(zhí)行

int sqlite3_reset(sqlite3_stmt *pStmt);

過程將回到?jīng)]有執(zhí)行之前的狀態(tài)凿滤,綁定的參數(shù)不會(huì)變化。

其他工具函數(shù)

1. 得到結(jié)果總共的行數(shù)

int sqlite3_column_count(sqlite3_stmt *pStmt);

如果過程沒有返回值庶近,如update翁脆,將返回0

2. 得到當(dāng)前行中包含的數(shù)據(jù)個(gè)數(shù)

int sqlite3_data_count(sqlite3_stmt *pStmt);

如果sqlite3_step返回SQLITE_ROW,可以得到列數(shù)鼻种,否則為零反番。

3. 得到數(shù)據(jù)行中某個(gè)列的數(shù)據(jù)

sqlite3_column_xxx(sqlite3_stmt*, int iCol);

在sqlite3_step返回SQLITE_ROW后,使用它得到第iCol列的數(shù)據(jù)叉钥。

其中的xxx代表:

blob:指向保存數(shù)據(jù)內(nèi)存的指針

bytes, bytes16: 得到該blob類型數(shù)據(jù)的大小罢缸,或者text轉(zhuǎn)換為UTF8/UTF16的字符串長(zhǎng)度。

double, int, int64: 數(shù)值

text,text16:字符串指針

type:該列的數(shù)據(jù)類型(SQLITE_INTEGER投队,SQLITE_FLOAT枫疆,SQLITE_TEXT,SQLITE_BLOB蛾洛,SQLITE_NULL)

注意:如果對(duì)該列使用了不同與該列本身類型適合的數(shù)據(jù)讀取方法养铸,得到的數(shù)值將是轉(zhuǎn)換過的結(jié)果雁芙。

4. 得到數(shù)據(jù)行中某個(gè)列的數(shù)據(jù)的類型

int sqlite3_column_type(sqlite3_stmt*, int iCol);

返回值:SQLITE_INTEGER,SQLITE_FLOAT钞螟,SQLITE_TEXT兔甘,SQLITE_BLOB,SQLITE_NULL

使用的方法和sqlite3_column_xxx()函數(shù)類似鳞滨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末洞焙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拯啦,更是在濱河造成了極大的恐慌澡匪,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件褒链,死亡現(xiàn)場(chǎng)離奇詭異唁情,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)甫匹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門甸鸟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人兵迅,你說我怎么就攤上這事抢韭。” “怎么了恍箭?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵刻恭,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我扯夭,道長(zhǎng)鳍贾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任勉抓,我火速辦了婚禮贾漏,結(jié)果婚禮上候学,老公的妹妹穿的比我還像新娘藕筋。我一直安慰自己,他們只是感情好梳码,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布隐圾。 她就那樣靜靜地躺著,像睡著了一般掰茶。 火紅的嫁衣襯著肌膚如雪暇藏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天濒蒋,我揣著相機(jī)與錄音盐碱,去河邊找鬼把兔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瓮顽,可吹牛的內(nèi)容都是我干的县好。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼暖混,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼缕贡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拣播,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤晾咪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后贮配,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谍倦,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年泪勒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了剂跟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡酣藻,死狀恐怖曹洽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辽剧,我是刑警寧澤送淆,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站怕轿,受9級(jí)特大地震影響偷崩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜撞羽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一阐斜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诀紊,春花似錦谒出、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碌宴,卻和暖如春杀狡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贰镣。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工呜象, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留膳凝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓恭陡,卻偏偏與公主長(zhǎng)得像鸠项,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子子姜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容