2016-10-01 102 views
0

我使用Ionic2与SQLite的,我有以下几点:SQLite的错误:没有这样的列:

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); 
    }); 
    } 
} 

storageServicce.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,但在创建数据库时确实存在。

+0

可能重复的[SQLite插入问题 - 错误:没有这样的列](https://stackoverflow.com/questions/21958789/sqlite-insert-issue-error-no-such-column) – Veve

回答

2

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

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

+0

谢谢。我现在不在我的电脑里。但稍后会检查出来。 – Richard

+0

谢谢,这工作: 'this.database.executeSql(“SELECT * FROM messages where _id =?”,[data.rows.item(i).lastMessageId])。then((messageData)=> {' – Richard