FMDB的使用(swift)

    小编之前在开发中用过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 ); //回滚事务
参考地址https://www.jianshu.com/p/080d44d57ac2


这里给大家推荐一个查看sqlite数据库的工具,亲测还挺好用。 SQLite Database Browser

http://sqlitebrowser.sourceforge.net/
做为一个iphone客户端开发来说,这个已经足够用了。 另外他支持各种平台, 包括Windows/Linux/Mac OS.



你可能感兴趣的:(swift,iOS)