Swift 和 SQLite
Swift and SQLite
我正在学习关于在 Swift 上使用 SQLite 的教程,一切正常(代码如下)。我对数据库本身感到困惑。如果专家能向我澄清以下问题,我将不胜感激:
1-我希望数据库成为应用程序的一部分以供离线使用我的意思是用户将下载带有数据库的应用程序,其中我应该复制数据库本身吗?
2- 我试图将数据库复制到支持文件夹,但是当应用程序在我的 iphone 中运行时,数据库没有复制到我的 iphone。而不是我必须在 iphone
3 中构建一个新数据库- 数据库会很大,所以我不想在应用程序中构建它(我打算从 excel 使用 Firefox SQLite Manager,非常欢迎复制的替代方法)。
任何提示都非常受欢迎。提前致谢。
let filemgr = NSFileManager.defaultManager()
let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let docsDir = dirPaths [0] as! String
databasePath = docsDir.stringByAppendingPathComponent("contacts.db")
if !filemgr.fileExistsAtPath(databasePath as String) {
let contactDB = FMDatabase (path: databasePath as String)
if contactDB == nil {println("Error: \(contactDB.lastErrorMessage())")
}
if contactDB.open() {
let sql_stmt = "CREATE TABLE IF NOT EXISTS CONTACTS (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, ADDRESS TEXT, PHONE TEXT)"
if !contactDB.executeStatements(sql_stmt){
println("Error: \(contactDB.lastErrorMessage())")
}
contactDB.close()
}else {
println("Error: \(contactDB.lastErrorMessage())")
}
}
}
创建你自己的数据库并将数据库放入你的xcode项目中(只需将数据库拖入xcode项目中)并使用以下代码将数据库复制到你的应用程序中
override func viewDidLoad() {
super.viewDidLoad()
var fileManager = NSFileManager.defaultManager()
var Sourcepath = NSBundle.mainBundle().resourcePath?.stringByAppendingPathComponent("DataBase.db");
let docsPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as! String
let databaseStr = "DataBase.db"
let dbPath = docsPath.stringByAppendingPathComponent(databaseStr)
//check for database existance if not exsit than copy the database destination path
if(fileManager .fileExistsAtPath(dbPath) == false) {
var error:NSError?
fileManager.copyItemAtPath(Sourcepath!, toPath: dbPath, error: &error)
}
}
一旦数据库被复制到应用程序包中
1) 添加 libsqlite3.dylib 到您的项目
添加转到 application target ->Build Phases ->Link Binary With Libraries 并单击 +
2) 将#import <sqlite3.h>
这一行导入objective-C桥头文件
要创建桥头,请参考此 How to use Objective-C Classes in Swift
知道您将能够访问您 swift 代码
中的所有 sqlite 方法
我想你不能在 Swift 中插入数据库,如果我记得它是专有的,所以你不能在应用程序之外编辑....
我正在学习关于在 Swift 上使用 SQLite 的教程,一切正常(代码如下)。我对数据库本身感到困惑。如果专家能向我澄清以下问题,我将不胜感激:
1-我希望数据库成为应用程序的一部分以供离线使用我的意思是用户将下载带有数据库的应用程序,其中我应该复制数据库本身吗?
2- 我试图将数据库复制到支持文件夹,但是当应用程序在我的 iphone 中运行时,数据库没有复制到我的 iphone。而不是我必须在 iphone
3 中构建一个新数据库- 数据库会很大,所以我不想在应用程序中构建它(我打算从 excel 使用 Firefox SQLite Manager,非常欢迎复制的替代方法)。
任何提示都非常受欢迎。提前致谢。
let filemgr = NSFileManager.defaultManager()
let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let docsDir = dirPaths [0] as! String
databasePath = docsDir.stringByAppendingPathComponent("contacts.db")
if !filemgr.fileExistsAtPath(databasePath as String) {
let contactDB = FMDatabase (path: databasePath as String)
if contactDB == nil {println("Error: \(contactDB.lastErrorMessage())")
}
if contactDB.open() {
let sql_stmt = "CREATE TABLE IF NOT EXISTS CONTACTS (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, ADDRESS TEXT, PHONE TEXT)"
if !contactDB.executeStatements(sql_stmt){
println("Error: \(contactDB.lastErrorMessage())")
}
contactDB.close()
}else {
println("Error: \(contactDB.lastErrorMessage())")
}
}
}
创建你自己的数据库并将数据库放入你的xcode项目中(只需将数据库拖入xcode项目中)并使用以下代码将数据库复制到你的应用程序中
override func viewDidLoad() {
super.viewDidLoad()
var fileManager = NSFileManager.defaultManager()
var Sourcepath = NSBundle.mainBundle().resourcePath?.stringByAppendingPathComponent("DataBase.db");
let docsPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as! String
let databaseStr = "DataBase.db"
let dbPath = docsPath.stringByAppendingPathComponent(databaseStr)
//check for database existance if not exsit than copy the database destination path
if(fileManager .fileExistsAtPath(dbPath) == false) {
var error:NSError?
fileManager.copyItemAtPath(Sourcepath!, toPath: dbPath, error: &error)
}
}
一旦数据库被复制到应用程序包中
1) 添加 libsqlite3.dylib 到您的项目
添加转到 application target ->Build Phases ->Link Binary With Libraries 并单击 +
2) 将#import <sqlite3.h>
这一行导入objective-C桥头文件
要创建桥头,请参考此 How to use Objective-C Classes in Swift
知道您将能够访问您 swift 代码
我想你不能在 Swift 中插入数据库,如果我记得它是专有的,所以你不能在应用程序之外编辑....