[Vala] Another Sqlite example
- From: regnardet <regnardet gmx com>
- To: vala-list gnome org
- Subject: [Vala] Another Sqlite example
- Date: Thu, 28 Jan 2010 21:07:38 +0100
I ported an example from the Sqlite website into Vala and was wondering if anyone would like to put it on the
wiki?
This one is from: http://www.sqlite.org/cvstrac/wiki?p=SimpleCode
I was looking into the Sqlite bindings since I needed to output the result of a select statement to a
variable and use it as a return value.
Using a callback seemed to make this difficult so in this example it steps though the result of the statment
inside the method itself.
The code might look a bit messy and one can question whether eight levels of indentation is really necessary
for a simple Sqlite program.
But this is the way the original C code was structured so I tried to transcribe it as accurately as possible.
----------
using GLib;
using Sqlite;
public class SqliteSample : GLib.Object {
public static int main (string[] args) {
Database db;
Statement stmt;
int rc = 0;
int col, cols;
if ( args.length != 3 ) {
stderr.printf ("Usage: %s DATABASE SQL-STATEMENT\n", args[0]);
}
else {
rc = Database.open (args[1], out db);
if ( rc == 1)
stderr.printf("Can't open database: %s\n", db.errmsg ());
else{
rc = db.prepare_v2(args[2], -1, out stmt, null);
if ( rc == 1 ) {
stderr.printf ("SQL error: %d, %s\n", rc, db.errmsg ());
}
else {
cols = stmt.column_count();
do {
rc = stmt.step();
switch ( rc ) {
case Sqlite.DONE:
break;
case Sqlite.ROW:
for ( col = 0; col < cols; col++ ) {
string txt = stmt.column_text(col);
stdout.printf("%s = %s\n", stmt.column_name (
col ), txt);
}
break;
default:
stderr.printf("Error: %d, %s\n", rc, db.errmsg ());
break;
}
} while ( rc == Sqlite.ROW );
}
}
}
return rc != Sqlite.DONE ? 0 : 1;
}
}
----------
If it is needed I also made a small bash script for setting up a database to test with:
----------
#!/bin/bash
sqlite3 testdb <<SQL_ENTRY_TAG_1
CREATE TABLE tbl (data TEXT, num DOUBLE);
INSERT INTO tbl VALUES ("First row", 10);
INSERT INTO tbl VALUES ("Second row", 20);
SQL_ENTRY_TAG_1
----------
After running the script and compiling the program you can access the database by e.g:
./sqlitesample2 testdb "select * from tbl"
Which will output:
data = First row
num = 10.0
data = Second row
num = 20.0
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]