【问题标题】:SQLite Error: no such column:SQLite 错误:没有这样的列:
【发布时间】:2017-02-09 19:52:03
【问题描述】:

我正在使用带有 SQLite 的 Ionic2,我有以下内容:

app.ts

  private createDatabase(): void {
    let db: SQLite = new SQLite();
    db.openDatabase({
      name: "data.db",
      location: "default"
    }).then(() => {
      db.executeSql("CREATE TABLE IF NOT EXISTS chats (_id TEXT PRIMARY KEY, memberIds TEXT, title TEXT, subTitle TEXT, picture TEXT, lastMessageId TEXT, lastMessageCreatedAt DATE)", {}).then((chatData) => {
        console.log("chats TABLE CREATED: ", chatData);
        db.executeSql("CREATE TABLE IF NOT EXISTS messages (_id TEXT PRIMARY KEY, chatId TEXT, senderId TEXT, ownership TEXT, content TEXT, createdAt DATE, changeDate BOOLEAN, readByReceiver BOOLEAN)", {}).then((messageData) => {
          console.log("messages TABLE CREATED: ", messageData);
        }, (error) => {
          console.error("Unable to execute messages sql", error);
        });

      }, (error) => {
        console.error("Unable to execute chats sql", error);
      });
    }, (error) => {
      console.error("Unable to open database", error);
    });
  }
}

storageService.ts

        console.log('addMessage: chat '+chat._id);
        this.database.executeSql("SELECT * FROM chats where _id = " + chat._id, []).then((data) => {
            let chats = [];
            if (data.rows.length > 0) {
                for (var i = 0; i < data.rows.length; i++) {
                    this.chats.push({
                        _id: data.rows.item(i)._id
                    });
                }
            }
            console.log('addMessage: chats.length = ' + chats.length);

输出

addMessage: chat rSkFGaLgQ554FCCYJ 
ERROR: {"message":"sqlite3_prepare_v2 failure: no such column: rSkFGaLgQ554FCCYJ","code":0}

问题

你知道我为什么会收到错误吗?据我所知,错误所指的列是_id,但在我创建数据库时它确实存在。

【问题讨论】:

标签: sqlite angular ionic2


【解决方案1】:

您正在使用字符串从数据库中进行选择。该字符串不在引号中,因此它应该是一列。这就是为什么错误说该列不存在,而不是说_id 不存在。

将值括在单引号中,它将起作用。并确保它不是用户指定的值,否则您将有 SQL 注入的可能性。使用参数。

【讨论】:

  • 谢谢。我现在不在我的电脑前。但稍后会检查它。
  • 谢谢,成功了:this.database.executeSql("SELECT * FROM messages where _id = ?", [data.rows.item(i).lastMessageId]).then((messageData) =&gt; {
  • 谢谢!就我而言,我使用的是双引号。疯狂的是,我使用dBeaver 在我的PC 上用双引号测试了查询。 (我的目标设备是 ESP 32 微控制器)
猜你喜欢
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2019-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
相关资源
最近更新 更多