iOS Sqlite的基本使用方法

1.Sqlite的簡介

Sqlite是嵌入式的關(guān)系型數(shù)據(jù)庫,其特點(diǎn)如下:

1)它是基于c語言開發(fā)的數(shù)據(jù)庫,libsqlite3框架是基于c語言開發(fā)的。

2)在ios中要使用c語言對(duì)數(shù)據(jù)庫進(jìn)行操作。

3)sqlite采用的是動(dòng)態(tài)數(shù)據(jù)類型,值的數(shù)據(jù)類型與值本身相關(guān),與它的容器無關(guān)

2.iOS中使用sqlite的步驟

1)打開數(shù)據(jù)庫,利用sqlite3_open()打開數(shù)據(jù)庫。

用sqlite3_open()打開數(shù)據(jù)庫會(huì)指定一個(gè)數(shù)據(jù)庫文件的保存路徑,如果文件存在則直接打開,否則創(chuàng)建病打開。打開數(shù)據(jù)庫會(huì)得到一個(gè)sqlite3類型的的對(duì)象,以后借助這個(gè)對(duì)象進(jìn)行其他操作。

2)執(zhí)行sql語句,進(jìn)行增刪改查。

執(zhí)行sql語句包括有返回值的語句和無返回值的語句。對(duì)于無返回值的語句(例:增刪改),通過sqlite3_exec()函數(shù)執(zhí)行。對(duì)于有返回值的語句,首先用sqlite3_prepare_v2()進(jìn)行語法檢測,然后通過sqlite3_step()依次取出查詢結(jié)果的每一行數(shù)據(jù),可以使用sqlite3_column_類型()方法獲得對(duì)應(yīng)列的數(shù)據(jù),反復(fù)循環(huán)直到遍歷完成,最后釋放句柄。

在整個(gè)操作過程中無需管理數(shù)據(jù)庫連接,對(duì)于嵌入式SQLite操作是持久連接(盡管可以通過sqlite3_close()關(guān)閉),不需要開發(fā)人員自己釋放連接。

3.實(shí)際使用幾個(gè)函數(shù)。

1)向工程中添加libsqlite3的框架。(libsqlite3.0dylib與libsqlite3.dylib的區(qū)別:libsqlite3.0.dylib是個(gè)鏈接,他指向libsqlite3.dylib,兩者本質(zhì)相同。不過libsqlite3.0.dylib總是指向最新的sqlite3動(dòng)態(tài)庫,比如sqlite3更新了,如果我們引用libsqlite3.0.dylib,就不需要修改了。)

2)打開數(shù)據(jù)庫(都封裝為共有的方法)

-(openDB)

{

//獲取數(shù)據(jù)庫路徑.NSDocumentDirectory:說明獲取document的文件夾目錄, NSUserDomainMask:在當(dāng)前沙盒中獲取

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

NSString *documents = [paths objectAtIndex:0];

//設(shè)置數(shù)據(jù)庫的路徑。

NSString *database_path = [documents stringByAppendingPathComponent:DBNAME];(dbname是常變量)

//如果有數(shù)據(jù)庫則直接打開,否則創(chuàng)建并打開(注意database_path是ObjC中的字符串,需要轉(zhuǎn)化為C語言字符串類型)

if (sqlite3_open([database_path UTF8String], &db) == SQLITE_OK) {

return YES;

}else{

return NO;

NSLog(@”數(shù)據(jù)庫打開失敗”);

sqlite3_close(db);

}

}//創(chuàng)建并打開數(shù)據(jù)庫

2)執(zhí)行

11.沒有返回值

- (void)createDB{

//sql 語句

NSString *sqlCreateTable =? [NSString stringWithFormat:@”CREATE TABLE IF NOT EXISTS ‘%@’ (‘%@’ INTEGER PRIMARY KEY AUTOINCREMENT, ‘%@’ TEXT, ‘%@’ INTEGER, ‘%@’ TEXT)”,TABLENAME,ID,NAME,AGE,ADDRESS];

[self execSql:sqlCreateTable];

}

-(void) insertData{

NSString *insertSql1= [NSString stringWithFormat:

@”INSERT INTO ‘%@’ (‘%@’, ‘%@’, ‘%@’) VALUES (‘%@’, ‘%@’, ‘%@’)”,

TABLENAME, NAME, AGE, ADDRESS, @”張三”, @”13”, @”濟(jì)南”];

[self execSql:insertSql1];

NSString *insertSql2 = [NSString stringWithFormat:

@"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",

TABLENAME, NAME, AGE, ADDRESS, @"李四", @"12", @"濟(jì)南"];

[self execSql:insertSql2];

}


-(void) updateData{

NSString *updateSql = [NSString stringWithFormat:

@”UPDATE ‘%@’ SET ‘%@’ = ‘%@’ WHERE ‘%@’ = ‘%@’”,

TABLENAME,? AGE,? @”15” ,AGE,? @”13”];

[self execSql:updateSql];

}

-(void) deleteData{

NSString *sdeleteSql = [NSString stringWithFormat:

@”delete from %@ where %@ = ‘%@’”,

TABLENAME, NAME, @”張三”];

[self execSql:sdeleteSql];

}

-(void)execSql:(NSString *)sql

{

if ([self openDB]) {

char *err;

if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {

NSLog(@”數(shù)據(jù)庫操作數(shù)據(jù)失敗!”);

}else{

NSLog(@”%@”,sql);

?????????? }

sqlite3_close(db);

??? }

}

22.有返回值的

-(void) selectData{

[self openDB];

NSString *sqlQuery = [NSString stringWithFormat:

@"SELECT * FROM %@",TABLENAME];

sqlite3_stmt * statement;

if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) {

//查詢結(jié)果集中一條一條的遍歷所有的記錄,這里的數(shù)字對(duì)應(yīng)的是列值,注意這里的列值

while (sqlite3_step(statement) == SQLITE_ROW) {

char *name = (char*)sqlite3_column_text(statement, 1);

NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];

int age = sqlite3_column_int(statement, 2);

char *address = (char*)sqlite3_column_text(statement, 3);

NSString *nsAddressStr = [[NSString alloc]initWithUTF8String:address];

NSLog(@"name:%@? age:%d? address:%@",nsNameStr,age, nsAddressStr);

}

}else{

NSLog(@"select error:%@",sqlQuery);

}

sqlite3_close(db);

}





最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容