在iOS中,也同樣支持sqlite。目前有很多第三方庫,封裝了sqlite操作,比如swift語言寫的SQLite.swift、蘋果官網也為我們封裝了一個框架:CoreData。
它們都離不開Sqlite數據庫的支持。
本文主要介紹下,如何在swift中使用原生的sqlite的API。
在Xcode中引入sqlite API
新建一個swift項目後,我們需要讓項目引入sqlite的動態鏈接庫:
1、項目配置界面,選擇Build Phases
2、點開Link Binary With Libraries,點擊+號,在彈窗中輸入sqlite3
完成後:
3、創建橋接文件,在項目目錄下新建一個頭文件(h):
4、然後使用import導入sqlite庫:
#import "sqlite3.h"
5、最後一步,在項目配置界面,選擇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) }
以上就是關於iOS中sqlite數據庫的原生用法詳細介紹,希望對大家的學習有所幫助。