首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Linux C 語言操作 SQLite3 與 MySQL 統一封裝庫

     編輯:MySQL 綜合教學

Linux C 語言操作 SQLite3 與 MySQL 統一封裝庫

提供一套統一介面 dbClass,透過 type 區分 SQL_SQLITE3 / SQL_MYSQL,實現開啟、關閉、建表、增刪改查、索引、事務等通用操作。

編譯鏈接

gcc main.c -lsqlite3 -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient

核心結構與錯誤碼

  • dbClass:包含 type、db (void*) 指針
  • SQLite 錯誤碼對照: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;
}

通用 SQL 執行(以 Insert 為例)

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 原型。注意:生產環境建議使用成熟連接池與參數綁定防注入。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved