Sqlite
ketmar via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Jan 11 12:20:09 PST 2015
On Sun, 11 Jan 2015 20:00:03 +0000
Paul via Digitalmars-d-learn <digitalmars-d-learn at puremagic.com> wrote:
> Can someone please tell me what I'm doing wrong here, the sql
> INSERT statement fails for some reason. I don't fully understand
> the callback function yet (I borrowed this from a C tutorial on
> the subject), maybe that is the source of the problem?
>
>
> import etc.c.sqlite3;
> import std.stdio;
>
> //stub
> extern(C) int aCallback(void *n, int c, char **v, char **col)
> {
> return 0;
> }
>
> void main(){
>
> sqlite3 *db;
> int result = sqlite3_open("myDatabase.db", &db);
>
> if (result) {
> writeln("Failed to open database");
> return;
> }
>
> //create table
> char *msg = null;
> result = sqlite3_exec(db, "CREATE TABLE people('id INT PRIMARY
> KEY NOT NULL, surname TEXT NOT NULL');", &aCallback, null, &msg);
> if (result) {
> writeln("Failed to create table");
>
> //tidy up on exit
> sqlite3_close(db);
> return;
> }
>
> //insert record
> msg = null;
> result = sqlite3_exec(db, "INSERT INTO people (id, surname)
> VALUES (1, 'Smith');", &aCallback, null, &msg);
> if (result) {
> writeln("Failed to insert record");
>
> //tidy up on exit
> sqlite3_close(db);
> return;
>
> }
>
> sqlite3_free(msg);
> sqlite3_close(db);
>
> }
>
> Many thanks
>
> Paul
if you'll output the error message, you'll see something unusual here:
if (result) {
import std.conv : to;
writeln("Failed to insert record: ", to!string(msg));
//tidy up on exit
sqlite3_close(db);
return;
}
"Failed to insert record: table people has no column named id"
wow! but it has! or isn't it? yep, it hasn't. the error is here:
> result = sqlite3_exec(db, "CREATE TABLE people('id INT PRIMARY
> KEY NOT NULL, surname TEXT NOT NULL');", &aCallback, null, &msg);
`CREATE TABLE people('...')` is not the syntax you want. i don't know
why sqlite is not rejecting it, but the correct one is this:
result = sqlite3_exec(db, "CREATE TABLE people(id INT PRIMARY "~
"KEY NOT NULL, surname TEXT NOT NULL);", &aCallback, null, &msg);
note the single quotes in your code: that is where it all goes wrong. i
don't know where you got that quotes from, but this is not a valid SQL
syntax for `CREATE TABLE`. ;-)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://lists.puremagic.com/pipermail/digitalmars-d-learn/attachments/20150111/20895ae0/attachment.sig>
More information about the Digitalmars-d-learn
mailing list