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查詢某字段含某關鍵...