SQLite簡(jiǎn)介
SQLite,是一款輕型的數(shù)據(jù)庫(kù),是遵守ACID的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)汛兜,它包含在一個(gè)相對(duì)小的C庫(kù)中。
1.準(zhǔn)備工作
在iOS中要使用SQLite3通今,需要添加庫(kù)文件:libsqlite3.dylib并導(dǎo)入主頭文件粥谬,這是一個(gè)C語(yǔ)言的庫(kù)肛根。
支持的數(shù)據(jù)類(lèi)型
integer : 整數(shù)
real : 實(shí)數(shù)(浮點(diǎn)數(shù))
text : 文本字符串
blob : 二進(jìn)制數(shù)據(jù),比如文件漏策,圖片之類(lèi)的
2.創(chuàng)建數(shù)據(jù)庫(kù)并打開(kāi)
//1. 確認(rèn)存放路徑
NSString*docmentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];
//2.sqlite路徑
NSString *sqlitePath = [docmentPath stringByAppendingPathComponent:@"database.sqlite"];
NSLog(@"_+_+_+_+_+_%@",sqlitePath);
//打開(kāi)數(shù)據(jù)庫(kù) 語(yǔ)言派哲,指針
int result = sqlite3_open(sqlitePath.UTF8String,&db);
//判斷數(shù)據(jù)庫(kù)是否打開(kāi)成功
if (result==SQLITE_OK) {
NSLog(@"打開(kāi)數(shù)據(jù)庫(kù)成功");
}
else
{
NSLog(@"打開(kāi)數(shù)據(jù)庫(kù)失敗");
}
3.創(chuàng)建數(shù)據(jù)表
//sql語(yǔ)句
NSString *sqlString = @"create table Person(id integer primary key, name text, age integer)";
//執(zhí)行sql語(yǔ)句
char *error = nil;
sqlite3_exec(db,sqlString.UTF8String,nil,nil,&error);
//判斷是否出現(xiàn)了錯(cuò)誤
if(error ==nil)
{
NSLog(@"創(chuàng)建表成功");
}
else
{
NSLog(@"創(chuàng)建表失敗");
}
4.插入數(shù)據(jù)
//sql語(yǔ)句
NSString * sqlString = @"insert into Person('name','age') values ('張三',18)";
//第一個(gè)參數(shù): 需要執(zhí)行SQL語(yǔ)句的數(shù)據(jù)庫(kù)對(duì)象 //第二個(gè)參數(shù): 需要執(zhí)行的SQL語(yǔ)句 //第三個(gè)參數(shù): 回調(diào)函數(shù) //第四個(gè)參數(shù): 第三個(gè)參數(shù)的參數(shù) //第五個(gè)參數(shù): 接收錯(cuò)誤信息
//執(zhí)行sql語(yǔ)句
char *error = nil;
sqlite3_exec(db,sqlString.UTF8String,nil,nil,&error);
//判斷是否出現(xiàn)了錯(cuò)誤
if(error ==nil)
{
NSLog(@"插入數(shù)據(jù)成功");
}
else
{
NSLog(@"插入數(shù)據(jù)失敗");
}
5.更新數(shù)據(jù)
//sql語(yǔ)句
NSString * sqlString = @"update Person set name = '狗蛋' where id = 1";
//執(zhí)行sql語(yǔ)句
char *error = nil;
sqlite3_exec(db,sqlString.UTF8String,nil,nil,&error);
//判斷是否出現(xiàn)了錯(cuò)誤
if(error ==nil)
{
NSLog(@"更新數(shù)據(jù)成功");
}
else
{
NSLog(@"更新數(shù)據(jù)失敗");
}
6.查詢(xún)數(shù)據(jù)
-(void)select {
NSString *sqlString = @"select * from Person";
//準(zhǔn)備sql語(yǔ)句 第三個(gè)參數(shù)語(yǔ)句的長(zhǎng)度 (-1 自動(dòng)計(jì)算語(yǔ)句的長(zhǎng)度)
sqlite3_stmt *stmt = nil;// 數(shù)據(jù)庫(kù)管理的指針
sqlite3_prepare(db,sqlString.UTF8String,-1,&stmt,nil);
//單步執(zhí)行語(yǔ)句
while (sqlite3_step(stmt)==SQLITE_ROW) {
int ID = sqlite3_column_int(stmt, 0);
const unsigned char *name = sqlite3_column_text(stmt,1);
//c轉(zhuǎn)oc
NSString *nameString = [NSString stringWithUTF8String:(const char *)name];
int age = sqlite3_column_int(stmt, 2);
NSLog(@"id:%D, name:%@, age:%d",ID,nameString,age);
}
//釋放
sqlite3_finalize(stmt);
}
總結(jié)
總得來(lái)說(shuō),SQLite3的使用還是比較麻煩的掺喻,因?yàn)槎际切ヽ語(yǔ)言的函數(shù)芭届,理解起來(lái)有些困難。不過(guò)在一般開(kāi)發(fā)過(guò)程中感耙,使用的都是第三方開(kāi)源庫(kù) FMDB褂乍,封裝了這些基本的c語(yǔ)言方法,使得我們?cè)谑褂脮r(shí)更加容易理解即硼,提高開(kāi)發(fā)效率逃片。
附表
sqlite3數(shù)據(jù)庫(kù)打開(kāi)時(shí)的返回值及其所代表的含義
打開(kāi).sqlte 可以選擇火狐瀏覽器 安裝SQLite Manager打開(kāi)數(shù)據(jù)庫(kù)查看 或驗(yàn)證SQL語(yǔ)句
注:部分摘自