#概要
SQLiteのCドライバを使って
SQLiteにアクセスするサンプルを作りましたので、そのソースと手順などを共有したいと思います。
#環境構築
CentOSを想定してます。
yum install -y update
yum install -y vim gcc sqlite sqlite-devel
###データベースの設定
テスト用のデータを入力します。
sqlite3 db_test.sqlite3 # データベースファイル作成
create table tb_test(id integer,name text); # テーブル作成
# testデータ投入
insert into tb_test(id,name) values(1,'aaa');
insert into tb_test(id,name) values(2,'bbb');
insert into tb_test(id,name) values(3,'ccc');
.quit # 終了
#SQLiteにアクセス
詳細な指定をしたい場合、sqlite3_open()よりもsqlite3_open_v2()、
sqlite3_exec()よりもsqlite3_open_v2()を使った方が良いです。
sqlite.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlite3.h>
int print_resp( void * , int , char ** , char ** );
int main( void ){
int ret = 0;
sqlite3 *conn = NULL;
char *err_msg = NULL;
char sql_str[255];
memset( &sql_str[0] , 0x00 , sizeof(sql_str) );
// アクセス
ret = sqlite3_open(
"./db_test.sqlite3" , // DBファイル名
&conn // DBコネクション
);
if( SQLITE_OK != ret ){
// error
exit(-1);
}
// SQL文発行
snprintf( &sql_str[0] , sizeof(sql_str)-1 , "select * from tb_test" );
ret = sqlite3_exec(
conn , // DBコネクション
&sql_str[0] , // SQL文
print_resp , // コールバック関数
NULL , // CB関数に渡す引数
&err_msg // エラーメッセージ
);
if( SQLITE_OK != ret ){
// error
sqlite3_close( conn );
sqlite3_free( err_msg );
exit(-1);
}
// 後片づけ
ret = sqlite3_close( conn );
if( SQLITE_OK != ret ){
// error
exit(-1);
}
return 0;
}
int print_resp(
void *get_prm , // sqlite3_exec()の第4引数
int col_cnt , // 列数
char **row_txt , // 行内容
char **col_name // 列名
){
printf( "%s : %s\n" , row_txt[0] , row_txt[1] );
return 0;
}
##コンパイル、実行
-Lはlibsqlite3.soの場所を、-Iはsqlite3.hが配置されているディレクトリを指定します。
gcc -Wall -o sqlite sqlite.c -lsqlite3 -L/usr/lib64/ -I/usr/include/
./sqlite
1 : aaa
2 : bbb
3 : ccc