提供一套統一介面 dbClass,透過 type 區分 SQL_SQLITE3 / SQL_MYSQL,實現開啟、關閉、建表、增刪改查、索引、事務等通用操作。
gcc main.c -lsqlite3 -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient
dbClass:包含 type、db (void*) 指針SQLITE_OK=0, SQLITE_BUSY=5, SQLITE_ERROR=1 等int DBOpen(dbClass *sqlDB, const char *sqlName, char *localhost, char *user, char *password) {
if (sqlDB->type == SQL_SQLITE3) {
gseMutexLock(&dbMutex);
ret = sqlite3_open(sqlPathName, (sqlite3**)&sqlDB->db);
gseMutexUnlock(&dbMutex);
} else if (sqlDB->type == SQL_MYSQL) {
sqlDB->db = mysql_init(NULL);
mysql_real_connect(sqlDB->db, localhost, user, password, NULL, 0, NULL, 0);
mysql_query(sqlDB->db, "CREATE DATABASE IF NOT EXISTS ...");
mysql_query(sqlDB->db, "USE ...");
}
return ret;
}
int DBInsert(dbClass *sqlDB, const char *tableName, char *valuesString) {
sprintf(sqlInsetTable, "INSERT INTO %s VALUES(%s)", tableName, valuesString);
if (sqlDB->type == SQL_SQLITE3) {
gseMutexLock(&dbMutex);
ret = sqlite3_exec(sqlDB->db, sqlInsetTable, NULL, NULL, &errmsg);
gseMutexUnlock(&dbMutex);
} else if (sqlDB->type == SQL_MYSQL) {
ret = mysql_query(sqlDB->db, sqlInsetTable);
}
return ret;
}
BEGIN EXCLUSIVE; -- SQLite
COMMIT;
ROLLBACK;
dbAddColumn、dbInsertColumn、dbUpdateSet、dbSearchWhere:動態拼裝 SQL 片段嵌入式設備、雙資料庫適配、輕量級 ORM 原型。注意:生產環境建議使用成熟連接池與參數綁定防注入。