SQLite常用函數(shù)

1. 打開數(shù)據(jù)庫(kù):sqlite3_open

/**
  *  sqlite3_open 使用這個(gè)函數(shù)打開一個(gè)數(shù)據(jù)庫(kù)
  *  參數(shù)一: 需要打開的數(shù)據(jù)庫(kù)文件路徑
  *  參數(shù)二: 一個(gè)指向SQlite3數(shù)據(jù)結(jié)構(gòu)的指針, 到時(shí)候操作數(shù)據(jù)庫(kù)都需要使用這個(gè)對(duì)象
  *  功能作用: 如果需要打開數(shù)據(jù)庫(kù)文件路徑不存在, 就會(huì)創(chuàng)建該文件;如果存在, 就直接打開; 可通過返回值, 查看是否打開成功
*/
  if sqlite3_open(fileName, &db) == SQLITE_OK {
//            print("打開數(shù)據(jù)庫(kù)成功")
            if createTable() {
                print("創(chuàng)建表成功")
            } else {
                print("創(chuàng)建表失敗")
            }
        } else {
            print("打開數(shù)據(jù)庫(kù)失敗")
        }
    }

2.執(zhí)行語(yǔ)句: sqlite3_exec

 /// 創(chuàng)建表
   fileprivate func createTable() -> Bool {
        // 創(chuàng)建sqlite語(yǔ)句
        let sql = "create table if not exists t_stu(name text, age integer, score real, id integer primary key autoincrement)"
        // 執(zhí)行SQL語(yǔ)句
        // 參數(shù)一: 數(shù)據(jù)庫(kù)
        // 參數(shù)二: 需要執(zhí)行的SQL語(yǔ)句
        // 參數(shù)三: 回調(diào)結(jié)果, 執(zhí)行完畢之后的回調(diào)函數(shù), 如果不需要 置為NULL
        // 參數(shù)四: 參數(shù)三的第一個(gè)參數(shù), 刻意通過這個(gè)傳值給回調(diào)函數(shù) 如果不需要 置為NULL
        // 參數(shù)五: 錯(cuò)誤信息, 通過傳遞一個(gè)地址, 賦值給外界, 如果不需要 置為NULL
        let result = sqlite3_exec(db, sql, nil, nil, nil) == SQLITE_OK
        return result
        
    }

3. 創(chuàng)建準(zhǔn)備語(yǔ)句:sqlite3_prepare_v2

/ 1.創(chuàng)建準(zhǔn)備語(yǔ)句
        /*
         創(chuàng)建一個(gè)“準(zhǔn)備語(yǔ)句”,編譯好的sql 字符串
         參數(shù)一:一個(gè)已經(jīng)打開的數(shù)據(jù)庫(kù)對(duì)象
         參數(shù)二:需要編譯的sql 字符串
         參數(shù)三:取出sql 字符串的長(zhǎng)度 -1 代表自動(dòng)計(jì)算
         參數(shù)四:“準(zhǔn)備語(yǔ)句”砸逊,后期操作的對(duì)象
         參數(shù)五:通過參數(shù)3 取出參數(shù)2 剩余的長(zhǎng)度的字符串
         */
        /// 用來存儲(chǔ)嘹朗,已經(jīng)編譯號(hào)的準(zhǔn)備語(yǔ)句
        var stmt: OpaquePointer? = nil
        
        if sqlite3_prepare_v2(db, sql, -1, &stmt, nil) != SQLITE_OK {
            print("準(zhǔn)備語(yǔ)句創(chuàng)建失敗")
            sqlite3_finalize(stmt)
            return false
        }

4.綁定參數(shù)

/*
         綁定一個(gè)字符串到準(zhǔn)備語(yǔ)句里
         參數(shù)一:準(zhǔn)備語(yǔ)句
         參數(shù)二:綁定值的索引腔寡,從 1 開始
         參數(shù)三:需要綁定的值
         參數(shù)四:取出參數(shù)3 的多少長(zhǎng)度 -1 自動(dòng)計(jì)算
         參數(shù)五:代表參數(shù)的處理方式
         #define SQLITE_STATIC    函數(shù)內(nèi)部處理:參數(shù)是一個(gè)敞亮旺拉,不會(huì)被釋放,所以就不會(huì)額外的再次引用該參數(shù)
         #define SQLITE_TRANSIENT 函數(shù)內(nèi)部處理:參數(shù)是一個(gè)臨時(shí)的變量吕喘,后期有可能被修改或釋放毅否,所以函數(shù)內(nèi)部會(huì)對(duì)參數(shù)做一次引用處理,一旦使用完畢评雌,內(nèi)部會(huì)釋放
         */
    
        // 不安全的按位轉(zhuǎn)換
        // 使用這個(gè)函數(shù)的前提:必須明確知道树枫,值真正的數(shù)據(jù)類型
        let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
        
        for obj in valueArray {
            switch obj {
            case is String:
                sqlite3_bind_text(stmt, 1, obj as! String, -1, SQLITE_TRANSIENT)
            case is Int:
                sqlite3_bind_int(stmt, 2, Int32(obj as! Int))
            case is Double:
                sqlite3_bind_double(stmt, 3, obj as! Double)
            default:
                break
            }
        }

5.執(zhí)行準(zhǔn)備語(yǔ)句:sqlite3_step

if sqlite3_step(stmt) == SQLITE_DONE {
            //            print("執(zhí)行成功")
        }

6.重置語(yǔ)句:sqlite3_reset

sqlite3_reset(stmt)

7. 銷毀對(duì)象:sqlite3_finalize

sqlite3_finalize(stmt)

具體操作,請(qǐng)點(diǎn)擊 demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末景东,一起剝皮案震驚了整個(gè)濱河市砂轻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斤吐,老刑警劉巖搔涝,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異和措,居然都是意外死亡体谒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門臼婆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抒痒,“玉大人,你說我怎么就攤上這事颁褂」氏欤” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵颁独,是天一觀的道長(zhǎng)彩届。 經(jīng)常有香客問我,道長(zhǎng)誓酒,這世上最難降的妖魔是什么樟蠕? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮靠柑,結(jié)果婚禮上寨辩,老公的妹妹穿的比我還像新娘。我一直安慰自己歼冰,他們只是感情好靡狞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著隔嫡,像睡著了一般甸怕。 火紅的嫁衣襯著肌膚如雪甘穿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天梢杭,我揣著相機(jī)與錄音温兼,去河邊找鬼。 笑死武契,一個(gè)胖子當(dāng)著我的面吹牛妨托,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吝羞,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼内颗!你這毒婦竟也來了钧排?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤均澳,失蹤者是張志新(化名)和其女友劉穎恨溜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體找前,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡糟袁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了躺盛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片项戴。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖槽惫,靈堂內(nèi)的尸體忽然破棺而出周叮,到底是詐尸還是另有隱情,我是刑警寧澤界斜,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布仿耽,位于F島的核電站,受9級(jí)特大地震影響各薇,放射性物質(zhì)發(fā)生泄漏项贺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一峭判、第九天 我趴在偏房一處隱蔽的房頂上張望开缎。 院中可真熱鬧,春花似錦林螃、人聲如沸啥箭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)急侥。三九已至砌滞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坏怪,已是汗流浹背贝润。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铝宵,地道東北人打掘。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像鹏秋,于是被迫代替她去往敵國(guó)和親尊蚁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容