iPhone中的SQLite應用

2021-06-19 23:52:07 字數 4613 閱讀 4619

sqlite是基於c的api,在iphone中的執行速度超級快(在蘋果**上也有乙個對比,確實應該是速度最快的)。

由於在iphone3.0上已經支援了core data,是蘋果乙個新的api,並且是基於sqlite的。速度也是非常快吧,信不信由你。所以我們對sqlite僅需要懂一些即可,以下是一些基礎資訊

//**********==

首先在frameworks  中加入sqlite 的庫:  lib/libsqlite3.dylib 

完整路徑如下:

/developer/platforms/iphoneos.platform/developer/sdks/iphoneos3.0.sdk/usr/lib/libsqlite3.dylib

然後包含標頭檔案#import

一般操作:

//**********===

//databasepath 資料庫路徑

//database 資料庫名

int n = sqlite3_open([databasepath utf8string], &database);   //開啟資料庫

if(n != sqlite_ok)

//執行sql 語句

sqlite3_stmt *stmt;

char *sql = "select timedesc from tbltime where isactivated=1";  //sql 語句

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

int code = sqlite3_step(stmt);

nsmutablearray *arraydata = [[nsmutablearray alloc] init];

nsmutabledictionary *dictimedesc  = [[nsmutabledictionary alloc] init];

//把sql 語句的查詢結果儲存到 nsmutablearray 中

while (code == sqlite_row)

sqlite3_finalize(stmt); 

sqlite3_close(database);  //關閉資料庫

//帶引數的sql 語句

sqlite3_stmt *stmt;

char *sql = "select sno,brandname,picfilename,folderguid,picdesc,picdesclocation,iconspecname,stylename,picfilename_h from tblproduct where brandname = ? order by sno";

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

sqlite3_bind_text(stmt, 1, [brandname utf8string], -1, sqlite_transient);

//nsmutabledictionary *d;

char *c;

nsstring *s;

//int co

de = sqlite3_step(stmt);

while (co

de == sqlite_row)

//*****====

//執行事務

@try

nslog(@"updatesql %@",ssql);

nslog(@"r = %d",r);

[s release]; }

@catch (n***ception * em)

@finally }

int result = sqlite3_exec(database,"commit",0,0,&error); //commit

//**********====

//以下內容為網路上摘取的,我沒經過驗證,可以做為參考

開啟資料庫,如果沒有,那麼建立乙個

sqlite3* database_;

//找到資料庫檔案mydb.sql

if (find)

return yes;

}if(sqlite3_open([path utf8string], &database_) == sqlite_ok) else

return no;

}建立**

//建立**,假設有五個字段,(id,cid,title,imagedata ,imagelen )

//說明一下,id為**的主鍵,必須有。

//cid,和title都是字串,imagedata是二進位制資料,imagelen 是該二進位制資料的長度。

- (bool) createchannelstable:(sqlite3*)db

int success = sqlite3_step(statement);

sqlite3_finalize(statement);

if ( success != sqlite_done)

nslog(@"create table 'channels' successed.");

return yes;

}向**中插入一條記錄

假設channle是乙個資料結構體,儲存了一條記錄的內容。

- (bool) insertonechannel:(channel*)channel

//這裡的數字1,2,3,4代表第幾個問號

sqlite3_bind_text(statement, 1, [channel.id_ utf8string], -1, sqlite_transient);

sqlite3_bind_text(statement, 2, [channel.title_ utf8string], -1, sqlite_transient);

sqlite3_bind_blob(statement, 3, [imagedata bytes], imagelen, sqlite_transient);

sqlite3_bind_int(statement, 4, imagelen);    

success = sqlite3_step(statement);

sqlite3_finalize(statement);

if (success == sqlite_error)  

nslog(@"insert one channel#############:id = %@",channel.id_);

return yes;

}資料庫查詢

這裡獲取**中所有的記錄,放到陣列fchannels中。

- (void) getchannels:(nsmutablearray*)fchannels

//查詢結果集中一條一條的遍歷所有的記錄,這裡的數字對應的是列值。

while (sqlite3_step(statement) == sqlite_row)

[fchannels addobject:channel];

[channel release];

}sqlite3_finalize(statement);}

//***************====

開啟資料庫

sqlite3 *database = null;

//建立乙個sqlite資料庫變數

int sqlite3_open(

const

char

*檔名, sqlite3 **db)

;//那個檔名需要是cstring,

//之後那個db物件使用我們建立的database變數

//以下是乙個開打的例子: nsstring *fileaddress =

[[nsbundle mainbundle] pathforresource:@"預存檔案的檔名" oftype:@"db"];

//db是副檔名

if(sqlite3_open(

[fileaddress utf8string]

,&database)

== sqlite_ok)

//utf8string方法轉換nsstring為cstring

執行乙個sqlite語句:

int sqlite3_exec(sqlite3 *db,

const

char

*sql,

int(

*callback)

(void

*,int

,char

**,char**)

,void

*context,

char

**error)

;

關閉乙個資料庫:

int sqlite3_close(sqlite3 *db)

;//這個不用解釋了吧

乙個響應函式的格式:

int callback(

void

*context,

int count,

char

**values,

char

**columns)

;

iPhone中的SQLite應用

from sqlite是基於c的api,在iphone中的執行速度超級快 在蘋果 上也有乙個對比,確實應該是速度最快的 由於在iphone3.0上已經支援了core data,是蘋果乙個新的api,並且是基於sqlite的。速度也是非常快吧,信不信由你。所以我們對sqlite僅需要懂一些即可,以下是...

iphone開發之SQLite使用詳解

原文 sqlite是乙個開源的嵌入式關聯式資料庫,它在2000年由d.richard hipp發布,它的減少應用程式管理資料的開銷,sqlite可移植性好,很容易使用,很小,高效而且可靠。sqlite嵌入到使用它的應用程式中,它們共用相同的程序空間,而不是單獨的乙個程序。從外部看,它並不像乙個rdb...

iphone上使用Sqlite的注意事項小結

oct 17 1.使用sqlite需要新增框架集libsqlite3.dylib以及import標頭檔案。2.sqlite函式庫是使用c開發的,所以sql查詢語句需要使用char 儲存,nsstring轉char 請使用 nsstring utf8string 3.使用sqlite查詢某字段含某關鍵...