Bender86
Lieutenant
- Registriert
- Jan. 2007
- Beiträge
- 718
Hallo miteinander,
ich benutze grade die C Sqlite3 API und sie treibt mich in den Wahnsinn, ich hoffe ihr könnt mir bei folgendem Problem helfen:
Ich versuche eine Tabelle anzulegen und mit INSERT einen Eintrag hinzuzufügen. Wenn ich das Programm ausführe bekomme ich immer folgende Fehlermeldung: "could not prepare statemnt: no such column: foo". Ich verstehe das einfach nicht, "foo" ist doch eindeutig der Wert, der in die "name"-Spalte eingefügt werden soll. Wie kommt SQlite auf die Idee, "foo" soll die Spalte sein?
Ich sehe keinen Fehler in meinem INSERT Statement und hab keine Ahnung woran es sonst liegen könnte, ich hoffe hier kann mir jemand weiter helfen.
(kompilierbar z.B mit "gcc -Wall -g -o test test.c -lsqlite3")
*seufz* Gut das ich seit zig Stunden rumsuche, es nicht lösen kann und kaum das ich hier geschrieben hab die Lösung finde. Es fehlten die Quotes um "foo". Richtig ist:
Danke fürs zuhören. -.-
ich benutze grade die C Sqlite3 API und sie treibt mich in den Wahnsinn, ich hoffe ihr könnt mir bei folgendem Problem helfen:
Ich versuche eine Tabelle anzulegen und mit INSERT einen Eintrag hinzuzufügen. Wenn ich das Programm ausführe bekomme ich immer folgende Fehlermeldung: "could not prepare statemnt: no such column: foo". Ich verstehe das einfach nicht, "foo" ist doch eindeutig der Wert, der in die "name"-Spalte eingefügt werden soll. Wie kommt SQlite auf die Idee, "foo" soll die Spalte sein?
Ich sehe keinen Fehler in meinem INSERT Statement und hab keine Ahnung woran es sonst liegen könnte, ich hoffe hier kann mir jemand weiter helfen.
(kompilierbar z.B mit "gcc -Wall -g -o test test.c -lsqlite3")
Code:
#include <sqlite3.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv) {
sqlite3 *db;
int res;
// DB oeffnen
if(sqlite3_open("test.sqlite", &db) != SQLITE_OK) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return -1;
}
// Tabelle erstellen
char *errmsg = NULL;
res = sqlite3_exec(db, "CREATE TABLE test(id INTEGER PRIMARY KEY ASC, "
"name TEXT);", 0, 0, &errmsg);
if(res != SQLITE_OK) {
fprintf(stdout, "SQL error: %s\n", errmsg);
sqlite3_free(errmsg);
}
// Eintrag einfuegen
sqlite3_stmt *stmnt;
char *query = "INSERT INTO test (name) VALUES (foo);";
res = sqlite3_prepare_v2(db, query, -1, &stmnt, NULL);
if(res != SQLITE_OK) {
printf( "could not prepare statemnt: %s\n", sqlite3_errmsg(db) );
return -1;
}
res = sqlite3_step(stmnt);
sqlite3_finalize(stmnt);
if(sqlite3_close(db) == SQLITE_BUSY) {
fprintf(stdout, "Cannot close the db, there are unfinished statements running. %s\n", sqlite3_errmsg(db));
return -1;
}
return 0;
}
Ergänzung ()
*seufz* Gut das ich seit zig Stunden rumsuche, es nicht lösen kann und kaum das ich hier geschrieben hab die Lösung finde. Es fehlten die Quotes um "foo". Richtig ist:
Code:
char *query = "INSERT INTO test (name) VALUES ('foo');";
Danke fürs zuhören. -.-