This site has been retired. For up to date information, see handbook.gnome.org or gitlab.gnome.org.


[Home] [TitleIndex] [WordIndex

GNOME Data Access Library Example

Example

The next example, requires you have a SQLite database located in the same directory you are running the program. The database must be called "test.db".

/* file: test-gda.vala */
using Gda;

namespace Test {
        class SelectQuery : Object {
            public string field { set; get; default = "*"; }
            public string table { set; get; default = "test"; }
            public Connection connection { set; get; }
            
            public DataModel get_table_contents () 
                throws Error 
                requires (this.connection.is_opened())
            {
                stdout.printf("Building query...\n");
                /* Build Select Query */
                var b = new Gda.SqlBuilder(Gda.SqlStatementType.SELECT);
                b.select_add_field (this.field, null, null);
            b.select_add_target(this.table, null);
            var s = b.get_statement();
            stdout.printf("Executing...\n");
            return this.connection.statement_execute_select(s, null);
            }
        }
        
        class DataBase : Object {
                /* Using defaults will search a SQLite database located at current directory called test.db */
                public string provider { set; get; default = "SQLite"; }
                public string constr { set; get; default = "SQLite://DB_DIR=.;DB_NAME=test"; }
                public Gda.Connection cnn;
                
                public void open () throws Error {
                        stdout.printf("Opening Database connection...\n");
                        this.cnn = Gda.Connection.open_from_string (null, this.constr, null, Gda.ConnectionOptions.NONE);
                }

                /* Create a tables and populate them */
                public void create_tables () 
                        throws Error
                        requires (this.cnn.is_opened())
                {
                        stdout.printf("Creating and populating data...\n");
                        this.run_query("CREATE TABLE test (description string, notes string)");
                        this.run_query("INSERT INTO test (description, notes) VALUES (\"Test description 1\", \"Some notes\")");
                        this.run_query("INSERT INTO test (description, notes) VALUES (\"Test description 2\", \"Some additional notes\")");
                        
                        this.run_query("CREATE TABLE table1 (city string, notes string)");
                        this.run_query("INSERT INTO table1 (city, notes) VALUES (\"Mexico\", \"Some place to live\")");
                        this.run_query("INSERT INTO table1 (city, notes) VALUES (\"New York\", \"A new place to live\")");
                }
                
                public int run_query (string query) 
                        throws Error
                        requires (this.cnn.is_opened())
                {
                        stdout.printf("Executing query: [%s]\n", query);
                        return this.cnn.execute_non_select_command (query);
                }
        }
        
        class App : Object {
            public DataBase db;
            
            public App () {
                this.db = new DataBase();
            }
            
            public void test_initdb () 
                throws Error
            {
                stdout.printf("Test: Opening and initializing Database ...\n");
                /* Opening and initializing DB */
                try {
                        db.open();
                        db.create_tables();
                }
                catch (Error e) {
                        stdout.printf("ERROR: '%s'\n", e.message);
                }
            }
            
            public void test_builder() 
                throws Error 
                requires (this.db.cnn.is_opened())
            {
                stdout.printf("Test: GdaSqlBuilder...\n");
                var q = new SelectQuery();
                q.connection = this.db.cnn;
                
                /* Select * from test */
                this.show_data(q);
                
                /* Select notes from test */
                q.field = "notes";
                this.show_data(q);
                
                /* Select notes from table1 */
                q.table = "table1";
                this.show_data(q);
                
                /* Select * from table1 */
                q.field = "*";
                this.show_data(q);
            }
            
            public void show_data (SelectQuery q) 
                throws Error 
                requires (this.db.cnn.is_opened())
            {
                try {
                    var m = q.get_table_contents();
                    stdout.printf("Table: '%s'\n%s", q.table, m.dump_as_string());
                }
                catch  (GLib.Error e){
                    stdout.printf("ERROR: '%s'\n", e.message);
                }
            }
            
            public static int main (string[] args) {
                stdout.printf("GNOME Data Access Vala Demo\n");
                var a = new App();
                try {
                        a.test_initdb();
                    }
                    catch  (GLib.Error e){
                    stdout.printf("ERROR: '%s'\n", e.message);
                }
                try {
                        a.test_builder();
                    }
                    catch  (GLib.Error e){
                    stdout.printf("ERROR: '%s'\n", e.message);
                }
                return 0;
            }
        }
}

Compile

You must use latest libgda VAPI file from 4.2.10 and 5.0 versions and above.

For GDA 5.0, you can use:

valac --pkg libgda-5.0 --pkg libxml-2.0 test-gda.vala

Run

./test-gda

2024-10-23 11:37