0

因此,我使用此页面中的指南在我的电话间隙项目中创建了一个 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”而只使用“DROP TABLE IF EXISTS DEMO”吗?

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

4

2 回答 2

2

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

于 2012-04-05T11:57:23.960 回答
0

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

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")');
}

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

于 2012-12-24T23:27:14.583 回答