swift-FMDB简单使用

FMDB本质是对SQLit3.0的封装,使用步骤一样

  • 1.创建一个类来管理数据库
  • 2.将该类设计成单例
  • 3.打开或者创建数据库
  • 4.创建表
  • 5.基本操作:增删改查

注意:swift使用FMDB不建议使用cocoapods,问题比较多
1.把fmdb文件夹拖入项目
2.由于fmdb是oc写的,转换成swift需要桥接
2.1新建一个头文件,暂且命名为SQLite_bridge.h
2.2在文件中导入#import "FMDB.h"
3.工程文件中配置引用的桥接头文件地址,如图

swift-FMDB简单使用_第1张图片
配置.png

上代码

1.单例SQLiteManager

class SQLiteManager: NSObject {
    // 1.将类设计成单例
    static let shareInstance : SQLiteManager = SQLiteManager()
    
    // 保存数据库队列对象
    var dbQueue : FMDatabaseQueue?
    
    // 2.打开数据库
    func openDB (dbName : String) {
        // 2.1 获取数据库文件存放的路径
        let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomainMask.UserDomainMask , true).first
        let filePath = path?.stringByAppendingString("/" + dbName)
        print(filePath)
        
        // 2.2 创建数据库
        dbQueue = FMDatabaseQueue(path: filePath)
        
        // 2.3 创建表
        creatTable()
    }
    
    // 3.创建表
    private func creatTable() {
         // 3.1.拼接创建表的SQL语句
        let creatTableSQL =  "CREATE TABLE IF NOT EXISTS t_student ('id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,'name' TEXT,'age' INTEGER );"
        
        // 3.2.执行SQL语句
        dbQueue?.inDatabase({ (db) in
            if db.executeUpdate(creatTableSQL, withArgumentsInArray: nil){
                print("创建表成功")
            }
        })
    }
}

2.数据库基本操作:增删改查

  override func touchesBegan(touches: Set, 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 ); //回滚事务

你可能感兴趣的:(swift-FMDB简单使用)