日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

iOS进阶(数据库之SQLite)

發(fā)布時間:2025/3/17 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS进阶(数据库之SQLite) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

//通過sqlite3創(chuàng)建一個數(shù)據(jù)庫指針,將已有數(shù)據(jù)庫的內(nèi)容拷貝到沙盒中,對沙盒中的數(shù)據(jù)庫數(shù)據(jù)進(jìn)行操作

?

?

1.SQLite語句

在已有的數(shù)據(jù)庫中創(chuàng)建表create table 表名稱(ID integer primary key, name text not null, sex text default “男”)往表中插入數(shù)據(jù)insert into 表名稱 (name, sex) values(“源源”, “男”) 字段可以無順序,但是值一定要保證對應(yīng),并且此時 完全可以不設(shè)置sex字段的值,因為我們在創(chuàng)建表時 已經(jīng)把性別設(shè)置為default了。insert into 表名稱 values(11, “巴達(dá)”, “妖”) 必須保證設(shè)置的值與表中字段順序一樣修改表中某一條記錄的信息update 表名稱 set name = “hehe”, sex = “女” where ID = 1查詢語句select ID,name,sex from 表名稱 查詢的結(jié)果與你查詢的字段順序是一樣的。select * from 表名稱 查詢表中所有的字段信息,查詢的結(jié)果與你表中字段順序一樣select * from 表名稱 where ID = 1 后面可以跟條件查詢具體想要的信息select * from 表名稱 where ID > 1 and sex = “女” 可以跟多個條件,并且多個條件之間用and連接,此時查出來的是同up所有記錄。如果多個條件之間用or連接,那么查出來的結(jié)果只需要滿足其中一條就可以。select * from 表名稱 where name like “%源%” 只要名字中包含源,都可以查詢出來刪除記錄delete from 表名稱 where name = “源源”

2.操作數(shù)據(jù)庫步驟

創(chuàng)建一個類來操作數(shù)據(jù)庫(注意要先導(dǎo)入libsqlite3.dylib)

static sqlite3 *db = nil;//打開數(shù)據(jù)庫 + (sqlite3 *)open{//此方法的主要作用是打開數(shù)據(jù)庫,準(zhǔn)確的說是連接數(shù)據(jù)庫//方繪制是一個數(shù)據(jù)庫指針//因為 這個數(shù)據(jù)庫指針在很多的SQLite API(函數(shù))中都會用到,我們聲明一個類的方法來獲取,更加方便if (db != nil) {return db;}//獲取documents文件NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];//生成數(shù)據(jù)庫文件在沙盒中的位置NSString *sqlPath = [docPath stringByAppendingPathComponent:@"studb.sqlite"];//獲取文件管理對象NSFileManager *fileManager = [NSFileManager defaultManager];//判斷沙盒路徑中是否存在數(shù)據(jù)庫文件,如果不存咋才執(zhí)行拷貝操作,如果存在不在執(zhí)行拷貝操作if ([fileManager fileExistsAtPath:sqlPath] == NO) {//獲取數(shù)據(jù)庫文件在包中的文件NSString *filePath = [[NSBundle mainBundle] pathForResource:@"studb" ofType:@"sqlite"];//使用文件管理對象完成管理對象 [fileManager copyItemAtPath:filePath toPath:sqlPath error:nil];}// //創(chuàng)建一個數(shù)據(jù)庫指針 // sqlite3 *db = nil;//打開數(shù)據(jù)庫需要使用以下函數(shù)//第一個參數(shù)是數(shù)據(jù)庫路徑//第二個參數(shù) 是指向數(shù)據(jù)庫指針的指針sqlite3_open([sqlPath UTF8String], &db);return db; }//關(guān)閉數(shù)據(jù)庫 + (void)close{//關(guān)閉數(shù)據(jù)庫 sqlite3_close(db);//置空數(shù)據(jù)庫指針db = nil;}

//打開數(shù)據(jù)庫--創(chuàng)建語句對象(保存了關(guān)聯(lián)的數(shù)據(jù)庫,執(zhí)行的sql語句,sql語句的長度等信息)--逐行獲取數(shù)據(jù),并將讀出來的C語言轉(zhuǎn)化為OC語言--將數(shù)據(jù)保存入模型存放在數(shù)組中--最后不要忘記釋放語句對象

//查找學(xué)生 + (Student *)findStudentByID:(int)ID{//打開數(shù)據(jù)庫sqlite3 *db = [DB open];sqlite3_stmt *stmt = nil;Student *student = nil;int result = sqlite3_prepare_v2(db, "select * from Students where ID = ?", -1, &stmt, nil);if (result == SQLITE_OK) {//如果查詢語句或者 其他sql語句 有條件,在準(zhǔn)備語句對象的函數(shù)內(nèi)部,sql中用?來代替條件,那么在語句執(zhí)行之前一定要綁定sqlite3_bind_int(stmt, 1, ID);//第二個參數(shù)表示第幾個問號,問號的下標(biāo)從1 開始if (sqlite3_step(stmt) == SQLITE_ROW) {//獲取記錄中的字段信息const unsigned char *cName = sqlite3_column_text(stmt, 1);const unsigned char *cGender = sqlite3_column_text(stmt, 2);//將C語言字符串轉(zhuǎn)換成OC字符串NSString *name = [NSString stringWithUTF8String:(const char *)cName];NSString *gender = [NSString stringWithUTF8String:(const char *)cGender];student = [Student studentWithID:ID name:name gender:gender];}}//先釋放語句對象 sqlite3_finalize(stmt);return student; }

轉(zhuǎn)載于:https://www.cnblogs.com/w150385/p/5251651.html

總結(jié)

以上是生活随笔為你收集整理的iOS进阶(数据库之SQLite)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。