Ионный Cordova SQLite, вставьте данные, если они не существуют, если данные существуют, замените старые данные

#sql #database #sqlite

#sql #База данных #sqlite

Вопрос:

Я разрабатываю приложение с использованием Ionic и Cordova SQLite. Приложение вставляет данные в sqlite, если данные не существуют в sqlite, но если данные существуют в sqlite. Затем приложение заменяет старые данные. Ниже приведен мой код. Но я не могу вставить данные в базу данных sqlite.

Создать базу данных

 db = window.openDatabase("chatChannel.db", "1", "Demo SQLite Test", "2000");
$cordovaSQLite.execute(db, "CREATE TABLE IF NOT EXISTS chat_channel(id interger primary key, channel_name text unique, last_text text)")
  

Вставить данные

   var query = "INSERT INTO chat_channel (channel_name, last_text) VALUES(?,?) ON DUPLICATE KEY UPDATE (last_text) VALUES (?)";
  $cordovaSQLite.execute(db, query, [channel, $scope.messageContent], [$scope.messageContent]);
  

Могу ли я узнать, как вставить данные в cordova sqlite, если запись не существует в базе данных sqlite, и обновить данные, если данные существуют в базе данных.

Ответ №1:

Вы можете использовать REPLACE (https://www.sqlite.org/lang_insert.html )

 REPLACE INTO chat_channel (channel_name, last_text) VALUES(?,?)
  

Однако для правильной работы вам необходимо иметь уникальный или первичный ключ, задействованный в запросе (в вашем случае это сработает, если channel_name является первичным ключом chat_channel или если он уникален), см. https://www.sqlite.org/lang_conflict.html для получения подробной информации о разрешении конфликтов REPLACE

Комментарии:

1. Это не сработает. Что я хочу сделать, так это когда имя_канала доступно в базе данных sqlite, тогда он заменит last_text в базе данных, но если имя_канала отсутствует в базе данных, он вставит новые данные в базу данных.