Как вызвать функцию только один раз, когда окно загружено в javascript - PullRequest
0 голосов
/ 05 марта 2020

Я создаю проект cordova, в котором я создал базу данных. База данных включает таблицу, для которой я хочу вставить столбец идентификатора для таблицы при загрузке окна ... Проблема, с которой я сталкиваюсь, заключается в каждом при загрузке страницы вставляются идентичные идентификаторы ...... И я хочу вставить только один раз после этого, когда я загружаю идентификаторы страницы не должны вставляться .... Код приведено ниже

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]);  
}

}

Вывод: Вывод базы данных Вывод базы данных

1 Ответ

0 голосов
/ 06 марта 2020

Я думаю, что это не проблема с кордовой или javascript, а скорее проблема чистого логика c.

Что вам нужно сделать, это проверить, существует ли таблица schedule (или если идентификаторы уже есть в таблице), и если он не добавляет ваши 24 идентификаторов. См. Как проверить в SQLite, существует ли таблица? для справки.

Примерно так

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) => {
  // ...
}

использует Функция стрелок определяет функцию, но она точно такая же, как и при ее написании. Это просто и моя привычка.

db.transaction(function(tx) {
  // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...