iOS进阶(数据库之SQLite)
生活随笔
收集整理的這篇文章主要介紹了
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字段的值,因?yàn)槲覀冊趧?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ù)庫指針//因?yàn)?這個數(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Easyui Tree 异步加载实例
- 下一篇: sed 命令小结