2016-10-01 6 views
0

I Ionic2 bin mit mit SQLite, ich habe folgendes:SQLite Fehler: keine solche Spalte:

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

Ausgabe

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

Frage

Wissen Sie, warum ich erhalte den Fehler? Soweit ich sehen kann, ist die Spalte, auf die sich der Fehler bezieht, _id, aber es existiert, wenn ich die Datenbank erstelle.

+0

Mögliche Duplikate von [SQLite einfügen Problem - Fehler: keine solche Spalte] (https://stackoverflow.com/questions/21958789/sqlite-insert-issue-error-no-such-column) – Veve

Antwort

2

Sie verwenden eine Zeichenfolge, um aus der Datenbank auszuwählen. Die Zeichenfolge steht nicht in Anführungszeichen, daher wird erwartet, dass es sich um eine Spalte handelt. Deshalb sagt der Fehler, dass die Spalte nicht existiert, es heißt nicht _id existiert nicht.

Wickeln Sie den Wert in einfache Anführungszeichen und es wird funktionieren. Stellen Sie sicher, dass es sich nicht um einen benutzerdefinierten Wert handelt, oder Sie haben die Möglichkeit zur SQL-Injektion. Verwenden Sie Parameter.

+0

Vielen Dank. Ich bin jetzt nicht an meinem PC. Aber werde es später überprüfen. – Richard

+0

Danke, das hat funktioniert: 'this.database.executeSql (" SELECT * FROM Nachrichten wo _id =? ", [Data.rows.item (i) .lastMessageId]). Dann ((messageData) => {' – Richard

Verwandte Themen