Select

Untuk menampilkan isi tabel, kalian bisa menggunakan select. Select membutuhkan callback jika function yang digunakan adalah sqlite3_exec. Callbacknya bisa ditulis seperti di bawah ini jika kalian hanya ingin mendapatkan nama kolom dan isinya.

int callback(void *notused, int jkolom, char **dataku, char **kolom){
 for(int i=0;i<jkolom;i++)printf("%s = %s\n", kolom[i], dataku[i]);
 printf("\n");
 return 0;
}

Jika kalian ingin mengganti nama kolom dari tabel dengan teks lain, kalian bisa mengubah isi callback tersebut. Isi dari function callback akan dieksekusi jika sql_exec menggunakannya sebagai parameter. Kalian tidak memerlukan callback untuk query selain select. Functionnya bisa kalian beri nama lain, dan tidak harus callback.

Sintaks penulisan statement select tanpa klausa tambahan adalah sebagai berikut.

  • Select * From nama_tabel
  • Select nama_kolom from nama_tabel
  • Select nama_kolom1, nama_kolom2, .... from nama_tabel

Contoh query :

  • Select * From siswa
  • Select nama From siswa
  • Select nama, alamat from siswa

Select bisa digunakan bersama dengan klausa where, order by, group by, limit, join dan agregate function.

//install librarynya kalau belum ada
#include <iostream>
#include <sqlite3.h>

char *err;
typedef char stringku[30];

int callback(void *notused, int jkolom, char **dataku, char **kolom){
   for(int i=0;i<jkolom;i++)printf("%s = %s\n", kolom[i], dataku[i]);
   printf("\n");
   return 0;
}

void isi_database(sqlite3 *conn){
    char query[255];
    static stringku data[3][2]={{"Geri", "Saribumi"}, {"Panji", "Wonokarto"}, {"Tomi", "Gading"}};
	     
    sqlite3_exec(conn, "Create Table siswa(id INTEGER Primary Key, nama Text, alamat Text);", 0, 0, &err); 
    //tambahkan data
    for(int i=0;i<3;i++){
        sprintf(query, "INSERT INTO siswa(id, nama, alamat) VALUES('%d','%s', '%s')", i, data[i][0], data[i][1]);
        sqlite3_exec(conn, query, 0, 0, &err);
    }
}

int main(){
	int res=0;
	char query[255]="SELECT * FROM siswa";
	sqlite3 *conn=NULL;
	sqlite3_stmt *stmt=NULL;
	sqlite3_open("databaseku.dat", &conn);
	
	//jika database kosong, tambah tabel
	if(conn){
	     isi_database(conn);
	}
	
	const unsigned char *isi;
	
	//gunakan query
	sqlite3_exec(conn, query, callback, 0, &err);
	sqlite3_close(conn);
	return 0;
}
Output :
id = 0
nama = Geri
alamat = Saribumi

id = 1
nama = Panji
alamat = Wonokarto

id = 2
nama = Tomi
alamat = Gading

Jika kalian tidak ingin menggunakan callback, fungsi yg digunakan bukan sqlite3_exec, tapi sqlite3_prepare_v2. Untuk menampilkan datanya, kalian perlu loop dan sqlite3_step. Setelah data selesai ditampilkan, kalian perlu menggunakan sqlite3_finalize. Contoh kode programnya bisa kalian lihat di bawah ini.

#include <iostream>
#include <sqlite3.h>

char *err;
typedef char stringku[30];

void isi_database(sqlite3 *conn){
    char query[255];
    static stringku data[3][2]={{"Geri", "Saribumi"}, {"Panji", "Wonokarto"}, {"Tomi", "Gading"}};
	     
    sqlite3_exec(conn, "Create Table siswa(id INTEGER Primary Key, nama Text, alamat Text);", 0, 0, &err); 
    //tambahkan data
    for(int i=0;i<3;i++){
         sprintf(query, "INSERT INTO siswa(id, nama, alamat) VALUES('%d','%s', '%s')", i, data[i][0], data[i][1]);
         sqlite3_exec(conn, query, 0, 0, &err);
    }
}

int main(){
	int res=0;
	char query[255]="SELECT * FROM siswa";
	sqlite3 *conn=NULL;
	sqlite3_stmt *stmt=NULL;
	sqlite3_open("databaseku.dat", &conn);
	
	//jika database kosong, tambah tabel
	if(conn){
	     isi_database(conn);
	}
	
	const unsigned char *isi;
	
	//gunakan query
	sqlite3_prepare_v2(conn, query, -1, &stmt, 0);
	
	//tampilkan_data
	while(1){
	    res=sqlite3_step(stmt);
	    
	    if(res==SQLITE_DONE || res==SQLITE_OK)break;
	    
	    int i=sqlite3_column_int(stmt, 0);
	    printf("%i. ", i);
	    isi=sqlite3_column_text(stmt, 1);
	    printf("%s", isi);
	    isi=sqlite3_column_text(stmt, 2);
	    printf(" : %s\n", isi);
	}
	sqlite3_finalize(stmt);
	
	sqlite3_close(conn);
	return 0;
}
Output :
0. Geri : Saribumi
1. Panji : Wonokarto
2. Tomi : Gading

Function sqlite3_column_text digunakan untuk mendapatkan isi kolom dari tabel di dalam database. Nilai kembaliannya berupa text. Parameter pertamanya adalah variabel bertipe sqlite3_stmt. Argumen dari parameter keduanya bisa kalian isi dengan posisi kolom yang kalian akses.

Khusus untuk kolom yang bertipe number atau int, kalian bisa menggunakan sqlite3_column_int. Selain itu, ada fungsi sqlite3_column_double untuk tipe data pecahan desimal.