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

C/C++ SQLite3 程式設計快速入門範例

     編輯:關於SqlServer

環境與標頭檔

環境:Cygwin + SQLite3。編譯需連結 sqlite3.lib。

完整程式碼

#include 
#include "sqlite3.h"
#include 

using namespace std;

const char* sqlCreate = "CREATE TABLE items(id INTEGER PRIMARY KEY, stocknum FLOAT, name VARCHAR(30), price FLOAT, status VARCHAR(12))";
const char* sqlSelect = "SELECT stocknum, name, price FROM items ORDER BY stocknum";
const char* sqlInsert0 = "INSERT INTO items VALUES(NULL, 323.123, 'Product01', 565.456, 'IN')";
const char* sqlInsert1 = "INSERT INTO items VALUES(NULL, 423.123, '莉?', 665.456, 'IN')";
const char* sqlInsert2 = "INSERT INTO items VALUES(NULL, 523.123, 'Product02', 765.456, 'IN')";

int printedHeader = 0;

static int callback(void* NotUsed, int columns, char** azData, char** azColName) {
    int i;
    if (printedHeader == 0) {
        printedHeader = 1;
        for (i = 0; i < columns; i++) {
            printf("%s  ", azColName[i]);
        }
        printf("\n");
    }
    for (i = 0; i < columns; i++) {
        printf("%s  ", azData[i] ? azData[i] : "NULL");
    }
    printf("\n");
    return 0;
}

int main(int argc, char** argv) {
    cout << "Begin, please waiting..." << endl;
    cout << "Parameters:" << endl;
    for (int k = 1; k < argc; k++) {
        cout << " " << k << " -> " << argv[k] << endl;
    }
    cout << endl;

    sqlite3* db;
    char* zErrMsg = 0;
    int rc;

    if (argc != 3) {
        printf("Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
        return 1;
    }

    rc = sqlite3_open(argv[1], &db);
    if (rc) {
        printf("Can't open database: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        return 1;
    }

    rc = sqlite3_exec(db, sqlCreate, NULL, 0, &zErrMsg);
    if (rc != SQLITE_OK) {
        printf("Create SQL error: %s\n", zErrMsg);
        sqlite3_free(zErrMsg);
    }

    rc = sqlite3_exec(db, sqlInsert0, NULL, 0, &zErrMsg);
    if (rc != SQLITE_OK) { printf("INSERT 0 error: %s\n", zErrMsg); sqlite3_free(zErrMsg); }

    rc = sqlite3_exec(db, sqlInsert1, NULL, 0, &zErrMsg);
    if (rc != SQLITE_OK) { printf("INSERT 1 error: %s\n", zErrMsg); sqlite3_free(zErrMsg); }

    rc = sqlite3_exec(db, sqlInsert2, NULL, 0, &zErrMsg);
    if (rc != SQLITE_OK) { printf("INSERT 2 error: %s\n", zErrMsg); sqlite3_free(zErrMsg); }

    rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
    if (rc != SQLITE_OK) {
        printf("SQL error: %s\n", zErrMsg);
        sqlite3_free(zErrMsg);
    }

    sqlite3_close(db);
    printf("Finished, exit now.\n");
    return 0;
}

關鍵 API 說明

  • sqlite3_open:開啟/建立資料庫檔案
  • sqlite3_exec:執行 SQL,非查詢傳 NULL callback,查詢傳 callback 函數指標
  • callback:逐列回呼,azColName 為欄位名陣列,azData 為資料值陣列
  • sqlite3_errmsg / sqlite3_free:錯誤訊息處理
  • sqlite3_close:關閉連線釋放資源

編譯與執行

gcc -o sqlite_demo sqlite_demo.c -lsqlite3
./sqlite_demo test.db "SELECT * FROM items"

此範例涵蓋建表、插入、參數化查詢回呼,可作為嵌入式 SQLite 開發的起手模板。

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