世博SQLite拒绝

时间:2018-11-05 19:15:06

标签: javascript reactjs sqlite native expo

我正在尝试进行简单的SQLite操作(例如选择和插入),但根本无法正常工作。

这是我的功能:

executarComando(strSql) {

    return new Promise((resolve, reject) => {
        db.transaction((tx) => {
            tx.executeSql(strSql, [], (tx, result) => {
                resolve(result);
            }, (err) => {
                reject(err);
            })
        },
        null,
        null)
    });
}

我称之为:

    const strSelect = `
    SELECT true AS existe FROM tb0101_Usuarios WHERE
    nomeUSUARIO='${nomeUsuario}',
    cnpjUSUARIO='${cnpjUsuario}'
    `;
    const res = await executarComando(strSelect);

以及它在我的控制台日志中引发的警告/错误:

Possible Unhandled Promise Rejection (id: 0):
WebSQLTransaction {
  "_complete": true,
  "_error": null,
  "_running": false,
  "_runningTimeout": false,
  "_sqlQueue": Queue {
    "first": undefined,
    "last": undefined,
    "length": 0,
  },
  "_websqlDatabase": WebSQLDatabase {
    "_currentTask": null,
    "_db": SQLiteDatabase {
      "_closed": false,
      "_name": "TitaniumApp.db",
    },
    "_running": false,
    "_txnQueue": Queue {
      "first": undefined,
      "last": undefined,
      "length": 0,
    },
    "version": "1.0",
  },
}

1 个答案:

答案 0 :(得分:0)

执行以下操作。

executarComando(strSql, params = []) {
   return new Promise((resolve, reject) => {
       db.transaction((tx) => {
           tx.executeSql(strSql, params,
               (_, result) => resolve(result),
               (_, err) => reject(err));
       });
   });
}

它将为您提供实际的错误,而不是事务对象。

顺便说一句,值得一提的是,您应该始终保护查询免受sql注入。您可以通过用?替换直接串联的值,并将它们传递给executeSql方法来实现:

const strSelect = `
    SELECT true AS existe FROM tb0101_Usuarios WHERE
    nomeUSUARIO=? AND
    cnpjUSUARIO=?
`;
const res = await executarComando(strSelect, [nomeUsuario, cnpjUsuario]);