目录[-]
概述在Xcode中引入sqlite API创建(打开)与关闭数据库创建表和删除表插入更新删除数据查询数据概述
sqlite数据库相信各位早已耳闻,当年我在做C# winform时就已经玩过了,非常轻巧的一个数据库,数据库仅一个文件,即建即用。
在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库:
5、最后一步,在项目配置界面,选择Build Setting,搜索框中输入swift,在结果中选择Objective-C Bridging Header,输入刚才新建的桥接文件的名称:
整个引入工作已经完成了,可以测试下是否引入成功,在swift文件中,输入sqlite3,看是否有sqlite3相关的智能提示出来。
创建(打开)与关闭数据库
要创建或者打开一个sqlite数据库,使用sqlite3_open方法,我们无需手动创建一个数据库文件,如果没有文件,sqlite3_open方法会为我们自动创建数据库文件,然后打开数据库。
?
1
2
3
4
5
6
7
8
9
let sqlitepath = NSHomeDirectory().stringByAppendingPathComponent(
"Documents/sqlite3.db"
)
let state = sqlite3_open(sqlitepath, &db)
if
state == SQLITE_OK{
println(
"打开数据库成功"
)
}
else
{
println(
"打开数据库失败"
)
}
这里
sqlite3_open方法的第二个参数是一个指针,是数据库打开后返回的一个操作指针,通过使用它,我们可以对数据库进行一系列的操作。我们先把它定义在外面,方便我们使用。
?
1
2
3
4
5
var db:COpaquePointer = nil
override func viewDidLoad() {
super.viewDidLoad()
...
}
创建表和删除表
使用sqlite3_exec方法可以执行一段sql语句,主要就是sql语句的差异,其他都一样:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
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来绑定值。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)
}
更新数据也类似几个步骤:
?
1
2
3
4
5
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)
删除数据:
?
1
2
3
4
let deleterow =
"delete from studets where name='lijialong'"
sqlite3_prepare_v2(db, deleterow, -1, &statement, nil)
sqlite3_step(statement)
sqlite3_finalize(statement)
查询数据
?
1
2
3
4
5
6
7
8
9
let query =
"select * from studets"
sqlite3_prepare_v2(db, query, -1, &statement, nil)
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