如何在 swift 3 中使用现有的 SQLite? (FMDB)
How to use existing SQLite in swift 3? (FMDB)
我想将 (Salary.db) 连接到我的 iOS (Swift) 项目
并从数据库中获取数据?
第一步,如何连接 Swift 3 中的现有数据库?
let fileURL = try! FileManager.default
.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
.appendingPathComponent("Salary.db")
guard let database = FMDatabase(path: fileURL.path) else {
print("unable to create database")
return
}
guard database.open() else {
print("Unable to open database")
return
}
这是 swift
中 SQLite 的最佳教程
http://www.appcoda.com/fmdb-sqlite-database/
https://www.raywenderlich.com/123579/sqlite-tutorial-swift
在 Github 上获取完整项目:click here
这是我的代码:
ModelManager.swift
import UIKit
import FMDB
let sharedInstance = ModelManager()
class ModelManager: NSObject {
var database: FMDatabase? = nil
var dbPath:String? = nil
class func getInstance() -> ModelManager
{
if(sharedInstance.database == nil)
{
let documentsPath1 = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
let logsPath = documentsPath1.appendingPathComponent("datadb")
let dbpath = logsPath?.appendingPathComponent("test.db")
sharedInstance.database = FMDatabase(path:dbpath?.path)
}
return sharedInstance
}
func getUserProfile() -> Dictionary<String, String> {
sharedInstance.database!.open()
let strQuery = "select * from tbl_UserProfile limit 1"
let resultSet: FMResultSet! = sharedInstance.database!.executeQuery(strQuery, withArgumentsIn: nil)
var dict:Dictionary<String, String> = [:]
if (resultSet != nil) {
while resultSet.next() {
dict = resultSet.resultDictionary() as! [String : String]
}
}
return dict as Dictionary<String, String>
}
}
SidePanelVC.swift
import UIKit
class SidePanelVC: UIViewController,UITableViewDataSource,UITableViewDelegate{
@IBOutlet weak var lblWelcomeMsg: UILabel!
override func viewDidLoad() {
self.setUserProfile()
}
func setUserProfile() {
let userProfile = ModelManager.getInstance().getUserProfile()
let userName:String = userProfile["FullName"] ?? "empty"
lblWelcomeMsg.text = userName
}
}
FMDB 是一个很棒的 Objective-C 库,Swift 还没有更新,有时在 Swift.
中感觉很尴尬
您可以考虑使用像 GRDB.swift which is written in Swift, robust, fast 这样的库,并授予您与 FMDB 相同的功能:
import GRDB
// GRDB's DatabaseQueue is similar to FMDB's FMDatabaseQueue
let dbQueue = try DatabaseQueue(path: "/path/to/database.sqlite")
try dbQueue.inDatabase { db in
// Same as FMDB's -[FMDatabase executeUpdate:withArgumentsInArray:]
try db.execute(
"INSERT INTO pointOfInterests (title, favorite, latitude, longitude) " +
"VALUES (?, ?, ?, ?)",
arguments: ["Paris", true, 48.85341, 2.3488])
// Same as FMDB's -[FMDatabase executeQuery:] and FMResultSet
let rows = try Row.fetchCursor(db, "SELECT * FROM pointOfInterests")
while let row = try rows.next() {
let title: String = row.value(named: "title")
let isFavorite: Bool = row.value(named: "favorite")
let coordinate = CLLocationCoordinate2DMake(
row.value(named: "latitude"),
row.value(named: "longitude"))
}
}
GRDB 还允许您在不需要时避免编写 SQL。有关详细信息,请参阅 README.md。
我想将 (Salary.db) 连接到我的 iOS (Swift) 项目 并从数据库中获取数据?
第一步,如何连接 Swift 3 中的现有数据库?
let fileURL = try! FileManager.default
.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
.appendingPathComponent("Salary.db")
guard let database = FMDatabase(path: fileURL.path) else {
print("unable to create database")
return
}
guard database.open() else {
print("Unable to open database")
return
}
这是 swift
中 SQLite 的最佳教程http://www.appcoda.com/fmdb-sqlite-database/
https://www.raywenderlich.com/123579/sqlite-tutorial-swift
在 Github 上获取完整项目:click here
这是我的代码:
ModelManager.swift
import UIKit
import FMDB
let sharedInstance = ModelManager()
class ModelManager: NSObject {
var database: FMDatabase? = nil
var dbPath:String? = nil
class func getInstance() -> ModelManager
{
if(sharedInstance.database == nil)
{
let documentsPath1 = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
let logsPath = documentsPath1.appendingPathComponent("datadb")
let dbpath = logsPath?.appendingPathComponent("test.db")
sharedInstance.database = FMDatabase(path:dbpath?.path)
}
return sharedInstance
}
func getUserProfile() -> Dictionary<String, String> {
sharedInstance.database!.open()
let strQuery = "select * from tbl_UserProfile limit 1"
let resultSet: FMResultSet! = sharedInstance.database!.executeQuery(strQuery, withArgumentsIn: nil)
var dict:Dictionary<String, String> = [:]
if (resultSet != nil) {
while resultSet.next() {
dict = resultSet.resultDictionary() as! [String : String]
}
}
return dict as Dictionary<String, String>
}
}
SidePanelVC.swift
import UIKit
class SidePanelVC: UIViewController,UITableViewDataSource,UITableViewDelegate{
@IBOutlet weak var lblWelcomeMsg: UILabel!
override func viewDidLoad() {
self.setUserProfile()
}
func setUserProfile() {
let userProfile = ModelManager.getInstance().getUserProfile()
let userName:String = userProfile["FullName"] ?? "empty"
lblWelcomeMsg.text = userName
}
}
FMDB 是一个很棒的 Objective-C 库,Swift 还没有更新,有时在 Swift.
中感觉很尴尬您可以考虑使用像 GRDB.swift which is written in Swift, robust, fast 这样的库,并授予您与 FMDB 相同的功能:
import GRDB
// GRDB's DatabaseQueue is similar to FMDB's FMDatabaseQueue
let dbQueue = try DatabaseQueue(path: "/path/to/database.sqlite")
try dbQueue.inDatabase { db in
// Same as FMDB's -[FMDatabase executeUpdate:withArgumentsInArray:]
try db.execute(
"INSERT INTO pointOfInterests (title, favorite, latitude, longitude) " +
"VALUES (?, ?, ?, ?)",
arguments: ["Paris", true, 48.85341, 2.3488])
// Same as FMDB's -[FMDatabase executeQuery:] and FMResultSet
let rows = try Row.fetchCursor(db, "SELECT * FROM pointOfInterests")
while let row = try rows.next() {
let title: String = row.value(named: "title")
let isFavorite: Bool = row.value(named: "favorite")
let coordinate = CLLocationCoordinate2DMake(
row.value(named: "latitude"),
row.value(named: "longitude"))
}
}
GRDB 还允许您在不需要时避免编写 SQL。有关详细信息,请参阅 README.md。