代码之家  ›  专栏  ›  技术社区  ›  Afshin Mobayen Khiabani

预填充的SQLite DB文件不保存更新?

  •  0
  • Afshin Mobayen Khiabani  · 技术社区  · 7 年前

    我已经创建了SQLite DB文件,并在模拟器的应用程序中填充了数据,现在我需要在新项目中使用相同的数据库和填充的数据。 我已将SQLite文件复制到新项目中,但每次我更新一行(删除/编辑)时,数据都会更新,直到下一次运行时,并且在重新运行项目后,我的数据和SQLite文件就像刚刚复制到项目中一样。

    注意:“clearData(SID:Int)”函数删除一行,但在xcode中重新运行项目后,该行就在那里了。。。

    以下是我的数据库结构:

    import SQLite
    
    var db: Connection!
    let sherTable = Table("Sher");
    let ID = Expression<Int>("SID");
    let Fname = Expression<String?>("Fname");
    let Ename = Expression<String?>("Ename");
    let Flike = Expression<Bool?>("Flike");
    let Elike = Expression<Bool?>("Elike");
    
    let byteTable = Table("Byte");
    let BID = Expression<Int>("BID");
    let BSID = Expression<Int>("SID");
    let Byte = Expression<String?>("Byte");
    let searchText = Expression<String?>("searchText");
    let BIsFarsi = Expression<Bool?>("IsFarsi");
    
    let maniTable = Table("Mani");
    let MID = Expression<Int>("MID");
    let MSID = Expression<Int>("SID");
    let Word = Expression<String?>("Word");
    let Meaning = Expression<String?>("Meaning");
    let MIsFarsi = Expression<Bool?>("IsFarsi");
    
    func connectToDB() {
        do {
            let path = Bundle.main.path(forResource: "hafezDb", ofType: "sqlite3")!;
    
            let tmp = try Connection(path);
            db = tmp;
        } catch {
            print(error);
        }
    }
    
    func clearData(_ SID: Int) {
        let sher = sherTable.filter(ID == SID);
        let u = sher.update(Flike <- !Flike);
        do {
            try db.run(u);
        } catch {
            print(error)
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   rmaddy    7 年前

    您必须在模拟器中运行。

    因此,您的应用程序似乎在模拟器中工作。但是,当您进行另一次构建时,项目中预填充的数据库文件会在每次运行时放回构建的应用程序中,然后重新开始使用原始数据。