WebSQL: SQLite Query возвращает ошибку транзакции - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь выполнить транзакцию SQL, используя WebSQLite. Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я запускаю код, я получаю сообщение об ошибке SQL, в котором говорится: SQLError {code: 5, message: "could not prepare statement (1 near ")": syntax error)"}

Я просто не могу понять, что означает эта ошибка, поэтому я попытался напечатать свой sqlзапрос в консоль, и он возвращает это: INSERT INTO propertiesList (reporterName, propertyType, bedrooms, datetime, furnitureTypes, monthlyRentPrice, notes, propertyLocation, images) VALUES ('Israel', 'Flat', 'Studio', '1570494720000', 'Furnished', '150000', '', '', '')

Кроме того, это моя структура кода:

db.transaction(transaction => {
                        transaction.executeSql(
                            `CREATE TABLE IF NOT EXISTS propertiesList (
                                id INTEGER PRIMARY KEY AUTOINCREMENT,
                                reporterName TEXT NOT NULL,
                                propertyType TEXT NOT NULL,
                                bedrooms TEXT NOT NULL, 
                                datetime TEXT NOT NULL,
                                monthlyRentPrice TEXT NOT NULL,
                                furnitureTypes TEXT,
                                notes TEXT,
                                propertyLocation TEXT,
                                images TEXT,
                             )`
                        );
                        if (duplicate === true) {
                            msg = 'You have a property that have some similar details with this. Please check and update it instead';
                        } else {
                            const formData = new FormData();
                            imageArray.forEach(image => formData.append('file[]', image));
                            if (imageArray.length > 0) {
                                axios.post(`https://cors-anywhere.herokuapp.com/http://laratweet.me/upload_photos`, formData).then(response => {
                                    console.log('from uploading image', response);
                                });
                            } else {
                                let sql = `INSERT INTO propertiesList (reporterName, propertyType, bedrooms, datetime, furnitureTypes, monthlyRentPrice, notes, propertyLocation, images) 
                                VALUES ('${reporterName}', '${propertyType}', '${bedrooms}', '${datetime}', '${furnitureTypes}', '${monthlyRentPrice}', '${notes}', '${propertyLocation}', '')`;

                                console.log(sql);

                                transaction.executeSql(sql);

                                refreshPropertiesList(true);

                                let interval1 = setInterval(() => {
                                    if (listTypes !== undefined) {
                                        let array = [];
                                        for (let i = 0; i < listTypes.length; i++) {
                                            array.push(listTypes[i].propertyType.toLowerCase());
                                        }
                                        listHandler(array);
                                        clearInterval(interval1);
                                    }
                                }, 1000);
                            }
                        }
                    }, onError, onSuccess); 

Моя проблема в том, что я не могу понять, что это за ошибка или какрешить эту проблему, и теперь я застрял в проекте, потому что я не могу продолжать какую-либо часть веб-сайта, если не работает функция «создать». Любая помощь приветствуется. Заранее спасибо.

1 Ответ

1 голос
/ 08 октября 2019

Fixed.

Завершающая запятая после 'images TEXT' при создании таблицы блокировала создание.

транзакция.executeSql (sql) (db не указана).

var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
  db.transaction(tx => {
    tx.executeSql(
      `CREATE TABLE IF NOT EXISTS propertiesList (
          id INTEGER PRIMARY KEY AUTOINCREMENT,
          reporterName TEXT NOT NULL,
          propertyType TEXT NOT NULL,
          bedrooms TEXT NOT NULL,
          datetime TEXT NOT NULL,
          monthlyRentPrice TEXT NOT NULL,
          furnitureTypes TEXT,
          notes TEXT,
          propertyLocation TEXT,
          images TEXT
       )`
    );
  });

  let sql = `INSERT INTO propertiesList (reporterName, propertyType, bedrooms, datetime, furnitureTypes, monthlyRentPrice, notes, propertyLocation, images) 
        VALUES ('Israel', 'Flat', 'Studio', '1570494720000', 'Furnished', '150000', '', '', '')`;
  db.transaction(tx=>{
      tx.executeSql(sql)
  })

W3C прекратил активно поддерживать спецификацию Web SQL в 2010 году и не планирует его поддерживать. См. База данных Web SQL.

Я советую вам использовать,

IndexedDB API является мощным, но может показаться слишком сложным для простых случаев. Если вы предпочитаете простой API, попробуйте библиотеки, такие как localForage, dexie.js, ZangoDB, PouchDB, idb, idb-keyval и JsStore, которые делают IndexedDB более удобным для программистов.

https://developers.google.com/web/tools/lighthouse/audits/web-sql

https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...