C言語でSQLite,データを取得(抽出)する (exec)

スポンサーリンク

鍛錬 234

C言語でSQLite,データを取得(抽出)する (exec)

C言語で SQLite3 を操作して、データを取得(抽出)する方法についてです。
 
本記事では sqlite3_exec() でデータを取得する方法について記述しています。

サンプルデータ

以下は、今回使用するサンプルデータです。

sqlite> 
sqlite> select * from fruits;
id   fruits_name   price 
---  ------------  ------
1    apple         300   
2    orange        250   
3    grape         500   
4    banana        350   
5    peach         700

プログラム

以下は、データを取得するプログラム、select_table.c です。

今回は、データベースファイル /var/tmp/fruits.db の、テーブル fruits のデータを取得しています。

// include
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlite3.h>

// prototype
int Sqlite3ExecCallback(void *cb_arg, int column_count,
						char **data, char **column_name);

// main
int main(void)
{
	char db_name[256] = "";
	char sql_str[256] = "";
	char *errmsg = '\0';
	int ret;
	
	sqlite3 *db = NULL;
	
	strncpy(db_name, "/var/tmp/fruits.db", sizeof(db_name) - 1);
	
	// オープン
	ret = sqlite3_open(db_name, &db);
	if (ret != SQLITE_OK) {
		printf("ERROR,sqlite3_open(),%s\n", sqlite3_errmsg(db));
		
		exit(EXIT_FAILURE);
	}
	
	// SQLステートメントを作成
	strncpy(sql_str,
			"select * from fruits",
			sizeof(sql_str) - 1
			);
	
	// SQLステートメントを実行
	ret = sqlite3_exec(db, sql_str, Sqlite3ExecCallback, NULL, &errmsg);
	if (ret != SQLITE_OK) {
		printf("ERROR,sqlite3_exec(),%s\n", errmsg);
		
		// クローズ
		sqlite3_close(db);
		
		// エラーメッセージのメモリ領域を解放
		sqlite3_free(errmsg);
		
		exit(EXIT_FAILURE);
	}
	
	// クローズ
	ret = sqlite3_close(db);
	if (ret != SQLITE_OK) {
		printf("ERROR,sqlite3_close(),%s\n", sqlite3_errmsg(db));
		
		exit(EXIT_FAILURE);
	}
	
	printf("\n");
	printf("SUCCESS,select table\n");
	
	return 0;
}

// ==================================================
// @brief      sqlite3_exec()のコールバック関数
// @param[in]  cb_arg        sqlite3_exec()の第4引数
// @param[in]  column_count  カラム(列)数
// @param[in]  data          データ
// @param[in]  column_name   カラム(列)名
// @return     0 -> 成功
// @note       無し
// ==================================================
int Sqlite3ExecCallback(void *cb_arg, int column_count,
						char **data, char **column_name)
{
	int i;
	
	(void)cb_arg;
	
	printf("------------\n");
	for (i = 0; i < column_count; i++)
		printf("%s,%s\n", column_name[i], data[i]);
	
	return 0;
}

実行結果

以下は、上記のプログラム select_table.c を実行してデータを取得しています。

***@ubuntu:~/***/test/sqlite3$ 
***@ubuntu:~/***/test/sqlite3$ gcc -Wall -Wextra select_table.c -o select_table -lsqlite3 -L/usr/lib/x86_64-linux-gnu -I/usr/include
***@ubuntu:~/***/test/sqlite3$ ./select_table
-------------------
id,1
fruits_name,apple
price,300
-------------------
id,2
fruits_name,orange
price,250
-------------------
id,3
fruits_name,grape
price,500
-------------------
id,4
fruits_name,banana
price,350
-------------------
id,5
fruits_name,peach
price,700

SUCCESS,select table

 
上記に示した通り、データを取得することができました。

タイトルとURLをコピーしました