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;
}
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;
}
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.