SQLite3データベースの基本操作
SQLiteは軽量でサーバレスなデータベースエンジンであり、C言語プログラムに組み込むことが可能です。
主要なSQLコマンド例
// テーブル作成
"CREATE TABLE PRODUCTS "
"(PRODUCT_ID INTEGER PRIMARY KEY AUTOINCREMENT,"
" PRODUCT_NAME TEXT NOT NULL, "
" STOCK_QTY INTEGER NOT NULL, "
" UNIT_PRICE REAL)"
// テーブル削除
"DROP TABLE IF EXISTS PRODUCTS"
// データ挿入
"INSERT INTO PRODUCTS (PRODUCT_NAME, STOCK_QTY, UNIT_PRICE) "
"VALUES ('apple', 50, 1.8)"
// データ検索
"SELECT PRODUCT_ID, PRODUCT_NAME, STOCK_QTY FROM PRODUCTS"
// データ更新
"UPDATE PRODUCTS SET PRODUCT_NAME='golden_apple' WHERE PRODUCT_NAME='apple'"
C言語実装サンプル
#include <stdio.h>
#include <sqlite3.h>
// クエリ結果処理用コールバック関数
static int result_handler(void *context, int col_count, char **row_values, char **col_names) {
for(int i = 0; i < col_count; i++) {
printf("%s: %s\n", col_names[i], row_values[i] ? row_values[i] : "NULL");
}
printf("---\n");
return 0;
}
int main() {
sqlite3 *db_conn;
int status;
char *error_msg = NULL;
// データベース接続
status = sqlite3_open("inventory.db", &db_conn);
if(status != SQLITE_OK) {
printf("データベース接続エラー: %s\n", sqlite3_errmsg(db_conn));
sqlite3_close(db_conn);
return 1;
}
// テーブル作成SQL実行
const char *create_sql = "CREATE TABLE IF NOT EXISTS PRODUCTS "
"(PRODUCT_ID INTEGER PRIMARY KEY AUTOINCREMENT,"
" PRODUCT_NAME TEXT NOT NULL, "
" STOCK_QTY INTEGER NOT NULL, "
" UNIT_PRICE REAL)";
status = sqlite3_exec(db_conn, create_sql, NULL, NULL, &error_msg);
if(status != SQLITE_OK) {
printf("SQLエラー: %s\n", error_msg);
sqlite3_free(error_msg);
}
// データ挿入
const char *insert_sql = "INSERT INTO PRODUCTS (PRODUCT_NAME, STOCK_QTY, UNIT_PRICE) "
"VALUES ('orange', 75, 1.2), "
"('grape', 40, 2.8), "
"('melon', 15, 5.5)";
status = sqlite3_exec(db_conn, insert_sql, NULL, NULL, &error_msg);
// データ検索
const char *select_sql = "SELECT * FROM PRODUCTS WHERE UNIT_PRICE > 2.0";
status = sqlite3_exec(db_conn, select_sql, result_handler, NULL, &error_msg);
// データベース切断
sqlite3_close(db_conn);
return 0;
}
コンパイル時にはSQLite3ライブラリをリンクする必要があります:
gcc db_example.c -lsqlite3 -o db_program