executeSql выдает результаты как ошибки - PullRequest
0 голосов
/ 05 октября 2018

Я не понимаю, почему следующий код работает так: все результаты отправляются в блоки catch.Последний блок catch после «select * from danceMoves» будет фактически записывать «swag» в консоль.

Это простой проект, созданный с использованием ionic start, а затем с добавлением cordova-sqlite-storage.Следуя документу сайта Ionic.

public testSQLite() {
this.sqlite.create({
  name: 'data.db',
  location: 'default'
})
  .then((db: SQLiteObject) => {
    db.executeSql('create table if not exists danceMoves(name VARCHAR(32))')
      .then(() => { debugger; console.error('Executed SQL') })
      .catch(e => { debugger; console.error(e) })
      .then(() => { debugger; return db.executeSql("insert into danceMoves(name) values('swag')") })
      .then(() => { debugger; return db.executeSql("select * from danceMoves") })
      .then(result => { debugger; console.log(result.rows.item(0).name) })
      .catch(error => { debugger; console.error(error) })
      .then(() => { debugger; return db.executeSql("select * from danceMoves") })
      .then(result => { debugger; console.log(result.rows.item(0).name) })
      .catch(result => { debugger; console.log(result.rows.item(0).name)});
  })
  .catch(e => { debugger; console.error(e) });
}

1 Ответ

0 голосов
/ 08 апреля 2019

Хорошо, я нашел возможное решение (по крайней мере, оно решило проблему для меня).executeSql метод ожидает два параметра: оператор и массив параметров.

Оператор может содержать параметры (например, SELECT * FROM table WHERE id=?), которые разрешаются с использованием объектов, указанных в массиве параметров (например, [1]).

Параметр массива params помечен как необязательный, поскольку может работать без параметров.Однако, если массив не был задан, результирующий набор запроса будет выдан как ошибка, а не возвращен.Чтобы это исправить, я всегда указывал пустой массив в качестве второго параметра, что решало проблему для меня.

Пример вызова: db.executeSql(SELECT * FROM danceMoves, []).then(result => console.log(result.rows.item(0).name)

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