【问题标题】:Explanation on how the sqlite DB is set up in phonegap关于如何在 phonegap 中设置 sqlite DB 的说明
【发布时间】:2012-04-05 11:15:07
【问题描述】:

因此,我使用此页面中的指南在我的电话间隙项目中创建了一个 SQLite DB:http://docs.phonegap.com/en/1.5.0/phonegap_storage_storage.md.html#Storage

我只有一个关于用数据填充数据库的函数的问题。

    function populateDB(tx) {
      tx.executeSql('DROP TABLE IF EXISTS DEMO');
      tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
      tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
      tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
  }

在此函数的顶部,它删除表 DEMO,然后在每次我们运行应用程序时再次创建。 这意味着它将创建一个新表并每次填充它,因为在上面的句子中删除表时该表被删除?!?

每次打开应用程序时删除和添加数据有什么意义,这不会给设备带来不必要的工作吗? 是否可以仅删除“如果存在演示则删除表” 并且只使用“DROP TABLE IF EXISTS DEMO”?

如果我不在顶部“删除表”,这是否意味着它每次都会添加复制数据?那么如果表已经存在,我需要一个 if 语句或其他东西吗?

【问题讨论】:

    标签: javascript sqlite cordova


    【解决方案1】:

    这只是一个例子,并不意味着做任何聪明甚至合乎逻辑的事情。您应该能够在没有任何准备的情况下运行它,这就是它的作用。

    【讨论】:

    • 我知道这是一个例子,我知道它不聪明,我知道它甚至不是本地的。但如果我不了解它为什么会这样做,我就无法在未来进化和使用更好的方法。我将永远继续使用这种不太聪明的方法:)
    【解决方案2】:

    我一直使用类似的东西。在开发过程中,您提供的代码允许从头开始对用户进行测试。然后,当准备好测试返回用户时,我会像这样注释掉第二行:

    function populateDB(tx) {
        //tx.executeSql('DROP TABLE IF EXISTS DEMO');   // Uncomment to test from scratch, comment for production!
        tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
        tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
        tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
    }
    

    我从不删除行,我只是删除或插入 // 作为在两种测试模式之间来回切换的快速而肮脏的方式。对于生产,我会留在注释掉的行中,但如果您愿意,可以将其删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      相关资源
      最近更新 更多