ios - 在 Swift 中使用 FMDB 打开数据库

标签 ios swift sqlite fmdb

我想使用 FMDB 打开现有数据库。数据库应该是一个以 .db 结尾的 sqlite 数据库。

我的代码是: static 让共享:DBManager = DBManager()

let databaseFileName = "/mydb.db"

var pathToDatabase: String!

var pathNSURL: NSURL!

var database: FMDatabase!


override init() {
    super.init()

    let documentsDirectory = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString) as String

    let zwerg = documentsDirectory + databaseFileName

    let pathNSURL = NSURL(fileURLWithPath: zwerg)

    let pathString = documentsDirectory + databaseFileName

    pathToDatabase = pathNSURL.path
    print(pathToDatabase)
}


func firstQuestion() -> Bool {
    if openDatabase(){
        let query = "SELECT * FROM movie"

        do {
            let result = try database.executeQuery(query, values: nil)
            print(result)
        }
        catch {
            print(error.localizedDescription)
        }
        database.close()
        return true
    }
    return false
}

func openDatabase() -> Bool {
    if database == nil {
        print(FileManager.default.fileExists(atPath: pathToDatabase))
        if FileManager.default.fileExists(atPath: pathToDatabase) {
            print("Database set new path -> File exists")
            database = FMDatabase(path: pathToDatabase)
        }
    }

    if database != nil {
        print("Database != nil")
        if database.open() {
            print("Database is open in != nil")
            return true
        }
    }

    return false
}

我从 VC 调用方法firstQuestion():

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    print(DBManager.shared.firstQuestion())
}

我的问题是 fileExists-Method 总是返回 false。文件名正确。这是我第一个使用 swift 数据库的项目,所以也许我犯了一个愚蠢的错误......有什么建议吗?

感谢您的帮助!

最佳答案

let fileManager = FileManager.default
let docURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!

let databaseURL = docURL.appendingPathComponent("databaseNaeme.db")

并将数据库初始化为:

database = FMDatabase(path: databaseURL.absoluteString)

关于ios - 在 Swift 中使用 FMDB 打开数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46101418/

相关文章:

ios - 如何将嵌入式 ViewController 连接到其父级的 IBOutlet?

ios - 相应地缩放 UIButton 中的图像

swift - 无法更改 UINavigationBar 自定义字体颜色

cakephp - CakePHP和SQLite: fatal error :在非对象上调用成员函数query()

bash - SQLite插入的bash循环错误

ios - 有没有办法在 iBook 小部件中捕获 "closing"事件?

ios - 在 viewWillAppear 之前设置 UINavigationItem 标题

ios - 当我在 Swift 中调用 AZSCloudBlob 时,Azure 存储中断

json - 尝试使用 Swift 中的 Json token 从服务器获取身份验证

python安装没有sqlite3库