FMDB库git下载地址:https://github.com/ccgus/fmdb
一、FMDB配置
- 1.使用pod或者直接把fmdb文件夹拖入项目中
- 2.在桥接文件中#import "FMDB.h"
- 3.创建SQLiteManager.swift类封装crud
import UIKit
// 数据库管理类
@objcMembers class SQLiteManager: NSObject {
// 创建单例
private static let manger: SQLiteManager = SQLiteManager()
private override init(){}
//对外返回单例对象
class func sharedManager() -> SQLiteManager {
return manger
}
// 数据库名称
private let dbName = "Test.db"
// 数据库地址
lazy var dbURL: URL = {
// 根据传入的数据库名称拼接数据库的路径
let fileURL = try! FileManager.default
.url(for: .applicationSupportDirectory, in: .userDomainMask,
appropriateFor: nil, create: true)
.appendingPathComponent(dbName)
printLog("数据库地址:", fileURL)
return fileURL
}()
// FMDatabase对象(用于对数据库进行操作)
lazy var db: FMDatabase = {
let database = FMDatabase(url: dbURL)
return database
}()
// FMDatabaseQueue对象(用于多线程事务处理)
lazy var dbQueue: FMDatabaseQueue? = {
// 根据路径返回数据库
let databaseQueue = FMDatabaseQueue(url: dbURL)
return databaseQueue
}()
}
二、基本数据库操作crud示例
- 全部写在extension SQLiteManager{ }中
1.创建User表
/**
创建用户表
*/
class func createUserTable() {
// 编写SQL语句(id: 主键 name和age是字段名)
let sql = "CREATE TABLE User (id integer, name text, account text, userId integer)"
SQLiteManager.sharedManager().dbQueue?.inDatabase({ (db) in
if db.open(){
do {
try db.executeUpdate(sql, values: [])
} catch let error as NSError {
printLog("error: \(error)")
}
}
db.close()
})
}
2.插入User信息
/**
插入用户登录信息
*/
class func insertUser(name: String, account: String, uuid: String, userId: Int) {
let sql = "INSERT INTO User (id, name, account, userId) VALUES (?,?,?,?)"
SQLiteManager.sharedManager().dbQueue?.inDatabase({ (db) in
if db.open(){
do {
try db.executeUpdate(sql, values: [1, name, account, uuid, userId])
} catch let error as NSError {
printLog("error: \(error)")
}
}
db.close()
})
}
3.删除User登录信息
/**
删除用户登录信息
*/
class func deleteUserInfo() {
let sql = "DELETE FROM User"
SQLiteManager.sharedManager().dbQueue?.inDatabase({ (db) in
if db.open(){
do {
try db.executeUpdate(sql, values: [])
} catch let error as NSError {
printLog("deleteUser error: \(error)")
}
}
db.close()
})
}
4.更新User信息
/**
更新用户信息
*/
class func updateUser(userId: NSInteger, name: NSString){
let sql = "UPDATE ExamInfo SET name=? WHERE userId=?"
SQLiteManager.sharedManager().dbQueue?.inDatabase({ (db) in
if db.open(){
do {
try db.executeUpdate(sql, values: [name,userId])
} catch let error as NSError {
printLog("error: \(error)")
}
}
db.close()
})
}
4.查询User信息
/**
查询用户userId
*/
class func selectUserId()->(Int) {
var userId: Int = 0
let sql = "SELECT * FROM User WHERE id = 1"
SQLiteManager.sharedManager().dbQueue?.inDatabase({ (db) in
if db.open() {
if let res = db.executeQuery(sql, withArgumentsIn: []){
// 遍历输出结果
while res.next() {
let id = res.int(forColumn: "id")
let userIdTmp = res.int(forColumn: "userId")
let sex = res.bool(forColumn: "sex")
let account = res.string(forColumn: "account") ?? ""
printLog(id, userIdTmp, sex, account)
userId = Int(userIdTmp)
}
}else{
printLog("userId 查询失败")
}
}
db.close()
})
return userId
}
三、其他常用数据库操作
1.动态添加表字段
/**
动态添加表字段
*/
class func updateUserTable(){
SQLiteManager.sharedManager().dbQueue?.inDatabase({ (db) in
if db.open(){
do {
if !db.columnExists("sex", inTableWithName: "User") {
let sql = String(format: "ALTER TABLE %@ ADD %@ %@", "User","sex","integer")
try db.executeUpdate(sql, values: [])
}
} catch let error as NSError {
printLog("error: \(error)")
}
}
db.close()
})
}
网友评论