【问题标题】:How to call a function only once on window is loaded in javascript如何在 javascript 中加载窗口时只调用一次函数
【发布时间】:2020-06-18 11:34:32
【问题描述】:

我正在构建一个 Cordova 项目,并在其中创建了一个数据库 数据库包含一个表,我想在加载窗口时为其插入表的 ID 列... 我面临的问题是每次加载页面时都会插入相同的 ID...... 之后我只想插入一次,每次加载页面 ID 时都不能插入 …… 代码如下

window.onload = function(){
db = openDatabase('Timetable', '1.0', 'Time Table', 10 * 1024 * 1024);

db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS schedule(ID INT PRIMARY KEY NOT NULL,monday TEXT,tuesday TEXT,wednesday TEXT,thursday TEXT,friday TEXT,saturday TEXT,sunday TEXT)');
for (var i=1;i<=24;i++){
   tx.executeSql('INSERT INTO schedule(ID) VALUES(?)',[i]);  
}

}

输出: Output of database Output of database

【问题讨论】:

  • 或许您可以在 SQL 中添加 where 子句以防止插入重复项?

标签: javascript sqlite cordova


【解决方案1】:

我认为这不是cordova或javascript的问题,而是纯粹的逻辑问题。

您需要做的是检查schedule 表是否存在(或者ID 是否已经在表中),以及它是否没有添加您的24 个ID。 参考How do I check in SQLite whether a table exists?

类似的东西

window.onload = function() {
  db = openDatabase('Timetable', '1.0', 'Time Table', 10 * 1024 * 1024);

  // Check for schedule table presence with something like this
  // SELECT name FROM sqlite_master WHERE type='table' AND name='{table_name}';
  // NOTE : I have not tested this code syntax. This is just to give you the idea, I don't know how to write correctly sqlite commands.
  var isScheduleCreated = false;
  db.transaction((tx) => {
    var result = tx.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name='schedule'");
    if (result) isScheduleCreated = true;
  });

  if (isScheduleCreated === false) {
    db.transaction(function (tx) {
      tx.executeSql('CREATE TABLE IF NOT EXISTS schedule(ID INT PRIMARY KEY NOT NULL,monday TEXT,tuesday TEXT,wednesday TEXT,thursday TEXT,friday TEXT,saturday TEXT,sunday TEXT)');
      for (var i=1;i<=24;i++) {
         tx.executeSql('INSERT INTO schedule(ID) VALUES(?)',[i]);  
      }
    }
  }
}

备注

db.transaction((tx) => {
  // ...
}

使用arrow functions来定义函数,但是和这样写完全一样。这更容易,也是我的习惯。

db.transaction(function(tx) {
  // ...
}

【讨论】:

    猜你喜欢
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 2011-03-28
    • 1970-01-01
    相关资源
    最近更新 更多