首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将app从SQLite.swift转换为GRDB.swift

将app从SQLite.swift转换为GRDB.swift
EN

Stack Overflow用户
提问于 2021-01-03 09:38:14
回答 1查看 204关注 0票数 0

我正在尝试将我的几个应用程序转换为使用GRDB.swift。有没有人有或者知道我可以在哪里找到一个文件来帮助我入门?我已经阅读了大部分的GRDB文档,但是我不能理解。下面是一个示例场景。

这是我从SQLite.sift转换而来的

代码语言:javascript
复制
class Database
{
    static let shared = Database()
    public let databaseConnection: DatabaseQueue?
    
    private init()
    {
        do
        {
            let fileUrl = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("MyDaatbase.sqlite")
            
            // GRDB
            let databaseConnection = try DatabaseQueue(path: fileUrl.path)
            self.databaseConnection = databaseConnection
        } catch {
            databaseConnection = nil
            let nserror = error as NSError
            print("Cannot connect to Database. Error is: \(nserror), \(nserror.userInfo)")
        }
    }
}

有没有人可以把这个转换成GRDB来帮我入门?

代码语言:javascript
复制
static func isAnimation() -> Bool
    {
        let theTable = Table("Settings")
        let theColumn = Expression<String>("AnimateNav")
        var theStatus = false
        
        do {
            for theAnswer in try Database.shared.databaseConnection!.prepare(theTable.select(theColumn)) {
                //print(theAnswer[theColumn])
                let theStatusText = (theAnswer[theColumn])
                
                theStatus = theStatusText == "true" ? true : false
            }
        } catch {
            print("Getting the isAnimation Status failed! Error: \(error)")
        }
        return theStatus
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-04 23:47:12

您可以使用原始SQL:

代码语言:javascript
复制
static func isAnimation() -> Bool {
    var theStatus = false
    do {
        let animateNav = try Database.shared.databaseConnection!.read { db in
            String.fetchOne(db, sql: "SELECT AnimateNav FROM Settings")
        }
        theStatus = animateNav == "true" ? true : false
    } catch {
        print("Getting the isAnimation Status failed! Error: \(error)")
    }
    return theStatus
}

您还可以为Settings表定义一个Record type,这是GRDB的首选方式:

代码语言:javascript
复制
// Settings.swift
struct Settings: Codable, FetchableRecord, TableRecord {
    var animateNav: String
    // other properties for other columns in the Settings table
    ...
}

// Your file
static func isAnimation() -> Bool {
    var theStatus = false
    do {
        let settings = try Database.shared.databaseConnection!.read { db in
            try Settings.fetchOne(db)
        }
        theStatus = settings?.animateNav == "true" ? true : false
    } catch {
        print("Getting the isAnimation Status failed! Error: \(error)")
    }
    return theStatus
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65545884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档