打开sqlite文件swift osx app并读取数据

时间:2015-04-14 16:05:01

标签: macos sqlite swift

我需要打开一个sqlite文件并从该文件中读取数据以显示在表中。 到目前为止,我有一个触发NSOpenPanel()的按钮,并获取路径。之后我尝试打开文件但是我遇到了编码问题。

在我的AppDelegate.swift

代码中
@IBAction func importFromKobo(sender: AnyObject) {
 var openPanel = NSOpenPanel()
    let fileDB = "kobodbtest.sqlite"

    openPanel.allowsMultipleSelection = false
    openPanel.canChooseDirectories = true
    openPanel.canCreateDirectories = true
    openPanel.canChooseFiles = false
    openPanel.beginWithCompletionHandler { (result) -> Void in
        if result == NSFileHandlingPanelOKButton {
            //Do what you will
            //If there's only one URL, surely 'openPanel.URL'
            var deviceURL = openPanel.URL!
            println("Path: \(deviceURL)")
            println(self.resultDev.stringValue)
            self.resultDev.stringValue += "\nPath: \(deviceURL)"
            self.resultInput.stringValue += "\nPath: \(deviceURL)"
            var fullFilePathURL = deviceURL.URLByAppendingPathComponent(fileDB)
            self.resultInput.stringValue += "\nFull path file: \(fullFilePathURL)"

            var fileOpenError:NSError?

            if NSFileManager.defaultManager().fileExistsAtPath(deviceURL.path!) {
                println("file OK")


                if let fileContent = String(contentsOfURL: fullFilePathURL, encoding: NSUTF8StringEncoding, error: &fileOpenError) {
                    println(fileContent)        // prints ReadMe.txt contents if successful
                } else {
                    if let fileOpenError = fileOpenError {
                    println(fileOpenError)  // Error Domain=NSCocoaErrorDomain Code=XXX "The file “ReadMe.txt” couldn’t be opened because...."
                    }
                }
            } else {
                println("file not found")
            }

        }
        if result == NSFileHandlingPanelCancelButton {
            self.resultDev.stringValue = "Cancel"
        }

    }

}`

控制台中的错误:

Path: file:///Users/alvaroruiz/Documents/xcode/
Result
file OK
Error Domain=NSCocoaErrorDomain Code=261 "The file “kobodbtest.sqlite” couldn’t be opened using text encoding Unicode (UTF-8)." UserInfo=0x60000026cb00 {NSFilePath=/Users/alvaroruiz/Documents/xcode/kobodbtest.sqlite, NSStringEncoding=4}

我已检查过sqlite> PRAGMA encoding;格式为UTF-8。

使用其他编码(如NSISOLatin1StringEncoding)检查并获取文本但带有大量符号。

你能指点我怎么做查询命令吗?并在表格中显示?

感谢。 阿尔瓦罗

1 个答案:

答案 0 :(得分:0)

您正在检查您刚刚选择的路径是否存在,这是不必要的。我想你想要检查最终文件:

if NSFileManager.defaultManager().fileExistsAtPath(fullFilePathURL.path!)

接下来,莱昂纳多的评论是正确的,你可以使用NSUTF16StringEncoding来阅读该文件:

if let fileContent = String(contentsOfURL: fullFilePathURL, encoding: NSUTF16StringEncoding, error: &fileOpenError) {

但是sqlite数据库不是一个文本文件,只是将普通内容作为文本阅读并不会让你走得太远。 :)所以你应该使用专用工具来处理它,比如SQLite.swift。这将允许您运行查询并在表格中显示结果。