斯威夫特和 SQLite
Posted
技术标签:
【中文标题】斯威夫特和 SQLite【英文标题】:Swift and SQLite 【发布时间】:2015-04-27 09:14:42 【问题描述】:我正在关注在 Swift 上使用 SQLite 的教程,一切正常(代码如下)。我对数据库本身感到困惑。如果专家能向我澄清以下问题,我将不胜感激: 1- 我希望数据库成为离线使用的应用程序的一部分 我的意思是用户将下载包含数据库的应用程序,我应该在哪里复制数据库本身? 2- 我试图将数据库复制到支持文件夹,但是当应用程序在我的 iphone 中运行时,数据库没有复制到我的 iphone。而不是我必须在 iphone3 中构建一个新数据库 - 数据库会很大,所以我不想在应用程序中构建它(我计划使用 Firefox SQLite 管理器从 excel 复制数据,替代方案非常欢迎复制)。 任何提示都非常受欢迎。提前致谢。
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())")
【问题讨论】:
【参考方案1】:创建自己的数据库并将数据库放入您的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 方法
【讨论】:
嗨,我应该在哪里插入您的代码?我遇到了一些错误 viewDidload() 函数 或应用程序 didFinishLaunchingWithOptions 方法 我删除我的代码并插入你的,没有错误,但仍然无法检索我在数据库中插入的联系人:( 如果您在模拟器中运行应用程序,只需在我的代码中添加 println(dbPath) 它将为数据库保存路径打开路径并检查您的数据库是否实际插入值?【参考方案2】:我认为你不能在 Swift 中插入数据库,如果我记得它是专有的,所以你不能在应用程序之外进行编辑......
【讨论】:
也许在 CoreData 上是正确的,但我正在尝试使用 FMDB以上是关于斯威夫特和 SQLite的主要内容,如果未能解决你的问题,请参考以下文章