2016-10-01 12 views
0

私はSQLiteのでIonic2を使用しています、私は次のようしている: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

ありがとうございます。私は今私のPCにいません。しかし、後でそれをチェックします。 – Richard

+0

ありがとう、それは働いた: 'this.database.executeSql(" SELECT * FROM messages where _id =? "、[data.rows.item(i).lastMessageId])。then((messageData)=> {' – Richard

関連する問題