小编之前在开发中用过FMDB,但是是oc,最近想看一下在swift下具体的一些改变,所以写了个小例子,总结下来方便他人使用。
一、前期配置
首先为了开发方便我们会利用cocoaPod导入第三方库,当你本地已经安装好pod的前提下,此时先创建podfile文件,命令为:
cd 项目根目录
touch podfile
之后可以看到项目目录下多了一个podfile文件,这时可以在podfile里面添加自己想添加的第三方库的名字。例如我想添加FMDB,最好指定版本号,这样防止多人开发使用的版本号不一致。查询版本号可以用命令:pod search FMDB 其他的库同理。我的文件里面的写法如下:
platform :ios, '9.0'
target 'FMDB的Demo' do
use_frameworks!
#Framework
pod 'FMDB', '~> 2.7.2'
end
这样在终端里执行:
pod install
就可以看到有xworkspace文件生成了,这时候关闭原有的项目,从这个里面进入。
然后在项目里面->General-> linked Frameworks and Libraries 添加上libsqlite3.tbd,和FMDB.framework
因为fmdb是oc语言的,所以需要添加桥文件。创建一个.h文件,接下里的工作就是配置路径。
首先
然后
注意这里的路径为直接在项目下创建.h文件。如果你在目录下的二级路径下创建自己要适当更改哦
然后在.h文件里面添加想引入的库就可以了
#import "FMDB.h"
至此相关准备工作已经完成。下面就可以开始写代码啦。
二、开始编程
创建一个SqliteManager类,继承自NSObject,用来实现数据库的相关操作。
class SQLiteManager: NSObject {
static let sharedInstance: SQLiteManager = SQLiteManager()
func dataBase() -> FMDatabase {
var path = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)[0]
path = path + "/swiftLearn.sqlite"
print(path)
return FMDatabase.init(path: path)
}
func createTable(tableName: String) {
let db = dataBase()
if db.open() {
let sql_stmt = "CREATE TABLE IF NOT EXISTS " + tableName + " ('id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,'name' TEXT,'age' INTEGER );"
if !db.executeStatements(sql_stmt) {
print("Error: \(db.lastErrorMessage())")
}
db.close()
} else {
print("Error: \(db.lastErrorMessage())")
}
db.close()
}
}
这里我只写出了建表过程,之词就可以建成一个sqlite数据库了。
其他数据库基本操作:增删改查
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
SQLiteManager.shareInstance.openDB("t_student")
// insertData()
querydb()
}
2.1查询
func querydb(){
// 1.拼接查询的SQL语句
let querySQL = "SELECT * FROM t_student ORDER BY id DESC;"
// 2.执行SQL语句
SQLiteManager.shareInstance.dbQueue?.inDatabase({ (db) in
let result = db.executeQuery(querySQL, withArgumentsInArray: nil)
while result.next(){
let studentId = result.stringForColumn("id")
let studentName = result.stringForColumn("name")
print(studentId,studentName)
}
})
}
2.2插入数据
func insertData()
{
// 1.拼接插入的SQL语句
let insertSQL = "INSERT INTO t_student (name, age) VALUES (?, ?);"
// 2.执行SQL语句
SQLiteManager.shareInstance.dbQueue?.inDatabase({ (db) in
if db.executeUpdate(insertSQL, withArgumentsInArray: ["chaunzhang",18]){
print("插入数据成功")
}
})
}
SQLite3 常用语句供查看
// 创建表
"CREATE TABLE FEED_TABLE(FeedID TEXT, Title TEXT, Summary TEXT, Author TEXT, ImageName VARCHAR(21), ImageType TEXT, MaxIndex INT, ImageData BLOB)"
// 查询记录
"select * form 'table_name'"
"select * form 'table name' where value = '?'"
// 插入记录
"INSERT INTO FEED_TABLE(FeedID, Title, Summary, ImageName, ImageType, MaxIndex) VALUES('%s', '%s', '%s', '%s', '%s', %d)"
// 更新记录
"update 'table_name' 'column_name' = 'value'"
// 删除记录
"DELETE FROM FAVORITE_TABLE WHERE EntryIndex = %d"
// 删除所有记录
"delete from 'table_name'"
// 删除表
"drop table 'table_name'"
// 查询表结构
"select sql from sqlite_master where name = 'table_name'"
callback的第三个参数
另外,sqlite3是支持事务的
int result;
result = sqlite3_exec( db, "begin transaction", 0, 0, &zErrorMsg ); //开始一个事务
result = sqlite3_exec( db, "commit transaction", 0, 0, &zErrorMsg ); //提交事务
result = sqlite3_exec( db, "rollback transaction", 0, 0, &zErrorMsg ); //回滚事务
这里给大家推荐一个查看sqlite数据库的工具,亲测还挺好用。 SQLite Database Browser
http://sqlitebrowser.sourceforge.net/
做为一个iphone客户端开发来说,这个已经足够用了。 另外他支持各种平台, 包括Windows/Linux/Mac OS.