iOS中sqlite數(shù)據(jù)庫(kù)的原生用法
在iOS中,也同樣支持sqlite。目前有很多第三方庫(kù),封裝了sqlite操作,比如swift語(yǔ)言寫的SQLite.swift、蘋果官網(wǎng)也為我們封裝了一個(gè)框架:CoreData。
它們都離不開Sqlite數(shù)據(jù)庫(kù)的支持。
本文主要介紹下,如何在swift中使用原生的sqlite的API。
在Xcode中引入sqlite API
新建一個(gè)swift項(xiàng)目后,我們需要讓項(xiàng)目引入sqlite的動(dòng)態(tài)鏈接庫(kù):
1、項(xiàng)目配置界面,選擇Build Phases

2、點(diǎn)開Link Binary With Libraries,點(diǎn)擊+號(hào),在彈窗中輸入sqlite3

完成后:

3、創(chuàng)建橋接文件,在項(xiàng)目目錄下新建一個(gè)頭文件(h):

4、然后使用import導(dǎo)入sqlite庫(kù):
#import "sqlite3.h"

5、最后一步,在項(xiàng)目配置界面,選擇Build Setting,搜索框中輸入swift,在結(jié)果中選擇Objective-C Bridging Header,輸入剛才新建的橋接文件的名稱:

整個(gè)引入工作已經(jīng)完成了,可以測(cè)試下是否引入成功,在swift文件中,輸入sqlite3,看是否有sqlite3相關(guān)的智能提示出來(lái)。
創(chuàng)建(打開)與關(guān)閉數(shù)據(jù)庫(kù)
要?jiǎng)?chuàng)建或者打開一個(gè)sqlite數(shù)據(jù)庫(kù),使用sqlite3_open方法,我們無(wú)需手動(dòng)創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)文件,如果沒(méi)有文件,sqlite3_open方法會(huì)為我們自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)文件,然后打開數(shù)據(jù)庫(kù)。
//數(shù)據(jù)庫(kù)存放路徑
let sqlitepath = NSHomeDirectory().stringByAppendingPathComponent("Documents/sqlite3.db")
//打開數(shù)據(jù)庫(kù),指定數(shù)據(jù)庫(kù)文件路徑,如果文件不存在后先創(chuàng)建文件,再打開,所以無(wú)需手動(dòng)創(chuàng)建文件
let state = sqlite3_open(sqlitepath, &db)
if state == SQLITE_OK{
println("打開數(shù)據(jù)庫(kù)成功")
}else{
println("打開數(shù)據(jù)庫(kù)失敗")
}
這里sqlite3_open方法的第二個(gè)參數(shù)是一個(gè)指針,是數(shù)據(jù)庫(kù)打開后返回的一個(gè)操作指針,通過(guò)使用它,我們可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行一系列的操作。我們先把它定義在外面,方便我們使用。
var db:COpaquePointer = nil
override func viewDidLoad() {
super.viewDidLoad()
...
}
創(chuàng)建表和刪除表
使用sqlite3_exec方法可以執(zhí)行一段sql語(yǔ)句,主要就是sql語(yǔ)句的差異,其他都一樣:
//創(chuàng)建表
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("創(chuàng)建表成功")
}
//刪除表
let removetable = "drop table studets"
let result2 = sqlite3_exec(db, removetable, nil, nil, nil)
if result2 == SQLITE_OK{
println("刪除表成功")
}
插入更新刪除數(shù)據(jù)
插入數(shù)據(jù)使用了占位符,sql語(yǔ)句中使用問(wèn)號(hào)代表值。使用sqlite3_bind_xxx來(lái)綁定值。
//插入數(shù)據(jù)
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{
//綁定數(shù)據(jù)
sqlite3_bind_int(statement, 1, 1)
sqlite3_bind_text(statement, 2, "lijialong", -1, nil)
//執(zhí)行
if sqlite3_step(statement) == SQLITE_DONE{
println("數(shù)據(jù)插入成功")
}
sqlite3_finalize(statement)
}
更新數(shù)據(jù)也類似幾個(gè)步驟:
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)
刪除數(shù)據(jù):
let deleterow = "delete from studets where name='lijialong'" sqlite3_prepare_v2(db, deleterow, -1, &statement, nil) sqlite3_step(statement) sqlite3_finalize(statement)
查詢數(shù)據(jù)
//查詢數(shù)據(jù)
let query = "select * from studets"
//這條執(zhí)行后,數(shù)據(jù)就已經(jīng)在sattement中了
sqlite3_prepare_v2(db, query, -1, &statement, nil)
//游標(biāo)往下走一步,如果返回SQLITE_ROW就進(jìn)入
while sqlite3_step(statement) == SQLITE_ROW{
let id = sqlite3_column_int(statement, 0)
let stuId = sqlite3_column_int(statement, 2)
}
以上就是關(guān)于iOS中sqlite數(shù)據(jù)庫(kù)的原生用法詳細(xì)介紹,希望對(duì)大家的學(xué)習(xí)有所幫助。
- iOS開發(fā)中使用SQL語(yǔ)句操作數(shù)據(jù)庫(kù)的基本用法指南
- iOS中FMDB數(shù)據(jù)庫(kù)之增刪改查使用實(shí)例
- iOS sqlite對(duì)數(shù)據(jù)庫(kù)的各種操作(日常整理全)
- iOS App項(xiàng)目中引入SQLite數(shù)據(jù)庫(kù)的教程
- iOS開發(fā)中使用FMDB來(lái)使程序連接SQLite數(shù)據(jù)庫(kù)
- iOS學(xué)習(xí)筆記(十六)——詳解數(shù)據(jù)庫(kù)操作(使用FMDB)
- 詳解ios中的SQL數(shù)據(jù)庫(kù)文件加密 (使用sqlcipher)
- iOS App使用SQLite之句柄的定義及數(shù)據(jù)庫(kù)的基本操作
- IOS 數(shù)據(jù)庫(kù)升級(jí)數(shù)據(jù)遷移的實(shí)例詳解
- iOS開發(fā)中如何優(yōu)雅的調(diào)試數(shù)據(jù)庫(kù)詳解
相關(guān)文章
IOS 開發(fā)之UITableView 刪除表格單元寫法
這篇文章主要介紹了IOS 開發(fā)之UITableView 刪除表格單元寫法的相關(guān)資料,這里提供實(shí)例幫助大家實(shí)現(xiàn)該功能,希望能幫助到大家,需要的朋友可以參考下2017-08-08
iOS開發(fā)-調(diào)用系統(tǒng)相機(jī)和相冊(cè)獲取照片示例
這篇文章主要介紹了iOS開發(fā)-調(diào)用系統(tǒng)相機(jī)和相冊(cè)獲取照片示例的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02
iOS App開發(fā)中使cell高度自適應(yīng)的黑魔法詳解
這篇文章主要介紹了iOS App開發(fā)中使cell高度自適應(yīng)的黑魔法詳解,作者利用iOS8以后的新特性講解了TableView、CollectionView中的cell高度自適應(yīng)以及UITextView輸入內(nèi)容實(shí)時(shí)更新cell高度的方法,需要的朋友可以參考下2016-03-03
iOS開發(fā)網(wǎng)絡(luò)編程之?dāng)帱c(diǎn)續(xù)傳
在下載較大的文件的時(shí)候,一次不能下載完畢,這就需要用到斷點(diǎn)續(xù)傳,那么在IOS開發(fā)中該如何實(shí)現(xiàn)呢,下面跟著小編一起通過(guò)本文來(lái)學(xué)習(xí)下。2016-08-08
iOS實(shí)現(xiàn)新年抽獎(jiǎng)轉(zhuǎn)盤效果的思路
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)抽獎(jiǎng)轉(zhuǎn)盤效果的思路,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
iOS實(shí)現(xiàn)數(shù)字倍數(shù)動(dòng)畫效果
在iOS開發(fā)中,制作動(dòng)畫效果是最讓開發(fā)者享受的環(huán)節(jié)之一,下面這篇文章主要給大家介紹了關(guān)于iOS實(shí)現(xiàn)數(shù)字倍數(shù)動(dòng)畫效果的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
IOS 靜態(tài)庫(kù)和Framework區(qū)別
這篇文章主要介紹了IOS 靜態(tài)庫(kù)和Framework區(qū)別的相關(guān)資料,這里對(duì)動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)做比較,選擇什么時(shí)候使用庫(kù)文件,需要的朋友可以參考下2016-12-12

