Size: a a a

Cordova — русскоговорящее сообщество

2020 May 15

MK

Maxim Kazantcev in Cordova — русскоговорящее сообщество
3) вставку сообщений в БД делать через insert or update - таким образом если даже дважды запишите сообщение, дубликата не будет.
источник

A

Aleksandr in Cordova — русскоговорящее сообщество
Иглрь а можешь поделится примеоом кода своего проекта , аналогичное пытаюсь запилить - прием уведомлений и складывание в базу
источник

I

Igor in Cordova — русскоговорящее сообщество
Maxim Kazantcev
3) вставку сообщений в БД делать через insert or update - таким образом если даже дважды запишите сообщение, дубликата не будет.
Можно тут поподробней. Как это INSERT or UPDATE?
источник

I

Igor in Cordova — русскоговорящее сообщество
Aleksandr
Иглрь а можешь поделится примеоом кода своего проекта , аналогичное пытаюсь запилить - прием уведомлений и складывание в базу
Там много кода. Может есть более конкретный вопрос ?
источник

MK

Maxim Kazantcev in Cordova — русскоговорящее сообщество
Igor
Можно тут поподробней. Как это INSERT or UPDATE?
сори криво написал. insert or replace. вот пример кода
источник

MK

Maxim Kazantcev in Cordova — русскоговорящее сообщество
createOrUpdate(messageId: string, chatId: string, ownerId: number, created_at: number, chat_type: string, type: string, message: string, read: number, isEventMessage) {
       let self = this;
       console.log('message date ', created_at);
       return new Promise((resolve, reject) => {
           self.DB.query([
               'INSERT OR REPLACE',
               'INTO messages',
               '(messageId, chatId, ownerId, created_at, chat_type, type, message, read, isEventMessage, currUserId)',
               'VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
           ], [
               messageId,
               chatId,
               ownerId,
               created_at,
               chat_type,
               type,
               message + '',
               read,
               isEventMessage,
               self.currUserId
           ]).then(() => self._then(resolve), () => self._err(reject, 'createOrUpdate'));
       });
   }
источник

A

Aleksandr in Cordova — русскоговорящее сообщество
Игорь нет у меня конкреиного вопроса. "Рыбу" хочу
источник

I

Igor in Cordova — русскоговорящее сообщество
Maxim Kazantcev
createOrUpdate(messageId: string, chatId: string, ownerId: number, created_at: number, chat_type: string, type: string, message: string, read: number, isEventMessage) {
       let self = this;
       console.log('message date ', created_at);
       return new Promise((resolve, reject) => {
           self.DB.query([
               'INSERT OR REPLACE',
               'INTO messages',
               '(messageId, chatId, ownerId, created_at, chat_type, type, message, read, isEventMessage, currUserId)',
               'VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
           ], [
               messageId,
               chatId,
               ownerId,
               created_at,
               chat_type,
               type,
               message + '',
               read,
               isEventMessage,
               self.currUserId
           ]).then(() => self._then(resolve), () => self._err(reject, 'createOrUpdate'));
       });
   }
А по каким полям он будет понимать дубликат это или нет?
источник

MK

Maxim Kazantcev in Cordova — русскоговорящее сообщество
messageId - генерируется сервером.
источник

I

Igor in Cordova — русскоговорящее сообщество
Да. Но как локальная база узнаёт что именно по этому id нужно смотреть дубли?
источник

A

Aleksandr in Cordova — русскоговорящее сообщество
не знаю как в sqlite ,а во всяких mysql по этому полю ( или сочетанию полей ) обьявляется что оно primary key или просто index unique , и в случае дублирования того что index unique срабатывает вариант с апдейтом
источник

MK

Maxim Kazantcev in Cordova — русскоговорящее сообщество
Igor
Да. Но как локальная база узнаёт что именно по этому id нужно смотреть дубли?
{
                   name: 'messageId',
                   type: 'TEXT PRIMARY KEY NOT NULL'
               }
источник

I

Igor in Cordova — русскоговорящее сообщество
Надо глянуть будет, в SQLite есть такое
источник

MK

Maxim Kazantcev in Cordova — русскоговорящее сообщество
У меня настройка при подключении бд - если работаю в браузере то это WebSql если натив то SqlLite а в остальном код полностью один и тот же
источник

MK

Maxim Kazantcev in Cordova — русскоговорящее сообщество
getDB() {
       console.log('get DB');
       let self = this;
       return new Promise((resolve, reject) => {
           self.platform.ready()
           .then(() => {
               if(self.platform.is('cordova')) {
                   self.sqlite.create({
                       name: self.constant.DB_CONFIG.name,
                       location: 'default'
                   }).then((db: SQLiteObject) => {
                       self.db = db;
                       resolve();
                   });
               } else {
                   self.db = (<any> window).openDatabase(self.constant.DB_CONFIG.name, '1.0', 'database', -1);
                   resolve();
               }
           });
       });
   }
источник

I

Igor in Cordova — русскоговорящее сообщество
Maxim Kazantcev
У меня настройка при подключении бд - если работаю в браузере то это WebSql если натив то SqlLite а в остальном код полностью один и тот же
У меня так же. Но SQLite просто сильно урезаная. Чёт я это решение сам не дадумал :)
источник

I

Igor in Cordova — русскоговорящее сообщество
Maxim Kazantcev
getDB() {
       console.log('get DB');
       let self = this;
       return new Promise((resolve, reject) => {
           self.platform.ready()
           .then(() => {
               if(self.platform.is('cordova')) {
                   self.sqlite.create({
                       name: self.constant.DB_CONFIG.name,
                       location: 'default'
                   }).then((db: SQLiteObject) => {
                       self.db = db;
                       resolve();
                   });
               } else {
                   self.db = (<any> window).openDatabase(self.constant.DB_CONFIG.name, '1.0', 'database', -1);
                   resolve();
               }
           });
       });
   }
Кстати, тут self лишний. this можно вызвать
источник

A

Aleksandr in Cordova — русскоговорящее сообщество
игорь ну если не хочешь делится рыбой, то как вариант - что за плагин рисует из sqlite журнал этих самых событий?
источник

I

Igor in Cordova — русскоговорящее сообщество
Aleksandr
игорь ну если не хочешь делится рыбой, то как вариант - что за плагин рисует из sqlite журнал этих самых событий?
не то что бы не хочу. там 4 файла, и далеко не все относится в сути
источник

I

Igor in Cordova — русскоговорящее сообщество
Aleksandr
игорь ну если не хочешь делится рыбой, то как вариант - что за плагин рисует из sqlite журнал этих самых событий?
что за журнал?
источник