ios中sqlite數據庫的原生用法

概述

sqlite數據庫相信各位早已耳聞,當年我在作C# winform時就已經玩過了,很是輕巧的一個數據庫,數據庫僅一個文件,即建即用。 html

在ios中,也一樣支持sqlite。目前有不少第三方庫,封裝了sqlite操做,好比swift語言寫的SQLite.swift、蘋果官網也爲咱們封裝了一個框架:CoreDataios

它們都離不開Sqlite數據庫的支持。 git

本文主要介紹下,如何在swift中使用原生的sqlite的API。 github

在Xcode中引入sqlite API

新建一個swift項目後,咱們須要讓項目引入sqlite的動態連接庫: sql

一、項目配置界面,選擇Build Phases 數據庫


二、點開Link Binary With Libraries,點擊+號,在彈窗中輸入sqlite3 swift


完成後: app

三、建立橋接文件,在項目目錄下新建一個頭文件(h): 框架

四、而後使用import導入sqlite庫: ide

#import "sqlite3.h"

五、最後一步,在項目配置界面,選擇Build Setting,搜索框中輸入swift,在結果中選擇Objective-C Bridging Header,輸入剛纔新建的橋接文件的名稱:

整個引入工做已經完成了,能夠測試下是否引入成功,在swift文件中,輸入sqlite3,看是否有sqlite3相關的智能提示出來。

建立(打開)與關閉數據庫

要建立或者打開一個sqlite數據庫,使用sqlite3_open方法,咱們無需手動建立一個數據庫文件,若是沒有文件,sqlite3_open方法會爲咱們自動建立數據庫文件,而後打開數據庫。

//數據庫存放路徑
let sqlitepath = NSHomeDirectory().stringByAppendingPathComponent("Documents/sqlite3.db")
//打開數據庫,指定數據庫文件路徑,若是文件不存在後先建立文件,再打開,因此無需手動建立文件
let state = sqlite3_open(sqlitepath, &db)
if state == SQLITE_OK{
    println("打開數據庫成功")
}else{
    println("打開數據庫失敗")
}
這裏 sqlite3_open方法的第二個參數是一個指針,是數據庫打開後返回的一個操做指針,經過使用它,咱們能夠對數據庫進行一系列的操做。咱們先把它定義在外面,方便咱們使用。
var db:COpaquePointer = nil
override func viewDidLoad() {
    super.viewDidLoad()
    ...
}

建立表和刪除表

使用sqlite3_exec方法能夠執行一段sql語句,主要就是sql語句的差別,其餘都同樣:

//建立表
let createtable = "create table if not exists students (id integer primary key autoincrement,name
text,stuId integer)"
let result = sqlite3_exec(db, createtable, nil, nil, nil)
if result == SQLITE_OK{
    println("建立表成功")
}
//刪除表
let removetable = "drop table studets"
let result2 = sqlite3_exec(db, removetable, nil, nil, nil)
if result2 == SQLITE_OK{
    println("刪除表成功")
}

插入更新刪除數據

插入數據使用了佔位符,sql語句中使用問號表明值。使用sqlite3_bind_xxx來綁定值。

//插入數據
let inserttable = "insert into studets (stuId,name) values(?,?)"
var statement:COpaquePointer = nil
let result3 = sqlite3_prepare_v2(db, inserttable, -1, &statement, nil)
if result3 == SQLITE_OK{
    //綁定數據
    sqlite3_bind_int(statement, 1, 1)
    sqlite3_bind_text(statement, 2, "lijialong", -1, nil)
    
    //執行
    if sqlite3_step(statement) == SQLITE_DONE{
        println("數據插入成功")
    }
    sqlite3_finalize(statement)
 }

更新數據也相似幾個步驟:

let updatetable = "update studets set name ='ss' where id = 1"
var statement:COpaquePointer = nil
sqlite3_prepare_v2(db, updatetable, -1, &statement, nil)
sqlite3_step(statement)
sqlite3_finalize(statement)
刪除數據:
let deleterow = "delete from studets where name='lijialong'"
sqlite3_prepare_v2(db, deleterow, -1, &statement, nil)
sqlite3_step(statement)
sqlite3_finalize(statement)

查詢數據

//查詢數據
let query = "select * from studets"
//這條執行後,數據就已經在sattement中了
sqlite3_prepare_v2(db, query, -1, &statement, nil)
//遊標往下走一步,若是返回SQLITE_ROW就進入
while sqlite3_step(statement) == SQLITE_ROW{
    let id = sqlite3_column_int(statement, 0)
    let stuId = sqlite3_column_int(statement, 2)
}

tips:

本文由wp2blog導入,原文連接:http://devonios.com/ios-sqlite.html

相關文章
相關標籤/搜索