在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 數(shù)據(jù)庫/ SQLite – C/C++
SQLite Having 子句
SQLite 運算符
SQLite 注入
SQLite Delete 語句
SQLite – Python
SQLite 數(shù)據(jù)類型
SQLite 簡介
SQLite 創(chuàng)建數(shù)據(jù)庫
SQLite Vacuum
SQLite Group By
SQLite 日期 & 時間
SQLite AND/OR 運算符
SQLite 刪除表
SQLite Distinct
SQLite Alter 命令
SQLite PRAGMA
SQLite 約束
SQLite 創(chuàng)建表
SQLite Like 子句
SQLite Limit 子句
SQLite Autoincrement
SQLite 子查詢
SQLite – C/C++
SQLite – PHP
SQLite 命令
SQLite Order By
SQLite Select 語句
SQLite Unions 子句
SQLite – Perl
SQLite – Java
SQLite 別名
SQLite 常用函數(shù)
SQLite Explain(解釋)
SQLite NULL 值
SQLite Glob 子句
SQLite 表達式
SQLite 視圖
SQLite Where 子句
SQLite Truncate Table
SQLite 索引
SQLite Insert 語句
SQLite 安裝
SQLite Indexed By
SQLite 分離數(shù)據(jù)庫
SQLite 觸發(fā)器
SQLite 語法
SQLite Joins
SQLite Update 語句
SQLite 附加數(shù)據(jù)庫
SQLite 事務

SQLite – C/C++

安裝

在 C/C++ 程序中使用 SQLite 之前,我們需要確保機器上已經(jīng)有 SQLite 庫??梢圆榭?SQLite 安裝章節(jié)了解安裝過程。

C/C++ 接口 API

以下是重要的 C&C++ / SQLite 接口程序,可以滿足您在 C/C++ 程序中使用 SQLite 數(shù)據(jù)庫的需求。如果您需要了解更多細節(jié),請查看 SQLite 官方文檔。

序號API & 描述
1sqlite3_open(const char *filename, sqlite3 *ppDb)

該例程打開一個指向 SQLite 數(shù)據(jù)庫文件的連接,返回一個用于其他 SQLite 程序的數(shù)據(jù)庫連接對象。

如果 filename 參數(shù)是 NULL 或 ':memory:',那么 sqlite3_open() 將會在 RAM 中創(chuàng)建一個內(nèi)存數(shù)據(jù)庫,這只會在 session 的有效時間內(nèi)持續(xù)。

如果文件名 filename 不為 NULL,那么 sqlite3_open() 將使用這個參數(shù)值嘗試打開數(shù)據(jù)庫文件。如果該名稱的文件不存在,sqlite3_open() 將創(chuàng)建一個新的命名為該名稱的數(shù)據(jù)庫文件并打開。

2sqlite3_exec(sqlite3, const char sql, sqlite_callback, void data, char *errmsg)

該例程提供了一個執(zhí)行 SQL 命令的快捷方式,SQL 命令由 sql 參數(shù)提供,可以由多個 SQL 命令組成。

在這里,第一個參數(shù) sqlite3 是打開的數(shù)據(jù)庫對象,sqlite_callback 是一個回調,data 作為其第一個參數(shù),errmsg 將被返回用來獲取程序生成的任何錯誤。

sqlite3_exec() 程序解析并執(zhí)行由 sql 參數(shù)所給的每個命令,直到字符串結束或者遇到錯誤為止。

3sqlite3_close(sqlite3)

該例程關閉之前調用 sqlite3_open() 打開的數(shù)據(jù)庫連接。所有與連接相關的語句都應在連接關閉之前完成。

如果還有查詢沒有完成,sqlite3_close() 將返回 SQLITE_BUSY 禁止關閉的錯誤消息。

連接數(shù)據(jù)庫

下面的 C 代碼段顯示了如何連接到一個現(xiàn)有的數(shù)據(jù)庫。如果數(shù)據(jù)庫不存在,那么它就會被創(chuàng)建,最后將返回一個數(shù)據(jù)庫對象。

    #include 
    #include 

    int main(int argc, char* argv[])
    {
       sqlite3 *db;
       char *zErrMsg = 0;
       int rc;

       rc = sqlite3_open("test.db", &db);

       if( rc ){
          fprintf(stderr, "Can't open database: %sn", sqlite3_errmsg(db));
          exit(0);
       }else{
          fprintf(stderr, "Opened database successfullyn");
       }
       sqlite3_close(db);
    }

現(xiàn)在,讓我們來編譯和運行上面的程序,在當前目錄中創(chuàng)建我們的數(shù)據(jù)庫 test.db。您可以根據(jù)需要改變路徑。

    $gcc test.c -l sqlite3
    $./a.out
    Opened database successfully

如果要使用 C++ 源代碼,可以按照下列所示編譯代碼:

    $g++ test.c -l sqlite3

在這里,把我們的程序鏈接上 sqlite3 庫,以便向 C 程序提供必要的函數(shù)。這將在您的目錄下創(chuàng)建一個數(shù)據(jù)庫文件 test.db,您將得到如下結果:

    -rwxr-xr-x. 1 root root 7383 May  8 02:06 a.out
    -rw-r--r--. 1 root root  323 May  8 02:05 test.c
    -rw-r--r--. 1 root root    0 May  8 02:06 test.db

創(chuàng)建表

下面的 C 代碼段將用于在先前創(chuàng)建的數(shù)據(jù)庫中創(chuàng)建一個表:

    #include 
    #include 
    #include 

    static int callback(void *NotUsed, int argc, char **argv, char **azColName){
       int i;
       for(i=0; i<argc; i++){
          printf("%s = %sn", azColName[i], argv[i] ? argv[i] : "NULL");
       }
       printf("n");
       return 0;
    }

    int main(int argc, char* argv[])
    {
       sqlite3 *db;
       char *zErrMsg = 0;
       int  rc;
       char *sql;

       /* Open database */
       rc = sqlite3_open("test.db", &db);
       if( rc ){
          fprintf(stderr, "Can't open database: %sn", sqlite3_errmsg(db));
          exit(0);
       }else{
          fprintf(stdout, "Opened database successfullyn");
       }

       /* Create SQL statement */
       sql = "CREATE TABLE COMPANY("
             "ID INT PRIMARY KEY     NOT NULL,"
             "NAME           TEXT    NOT NULL,"
             "AGE            INT     NOT NULL,"
             "ADDRESS        CHAR(50),"
             "SALARY         REAL );";

       /* Execute SQL statement */
       rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
       if( rc != SQLITE_OK ){
       fprintf(stderr, "SQL error: %sn", zErrMsg);
          sqlite3_free(zErrMsg);
       }else{
          fprintf(stdout, "Table created successfullyn");
       }
       sqlite3_close(db);
       return 0;
    }

上述程序編譯和執(zhí)行時,它會在 test.db 文件中創(chuàng)建 COMPANY 表,最終文件列表如下所示:

    -rwxr-xr-x. 1 root root 9567 May  8 02:31 a.out
    -rw-r--r--. 1 root root 1207 May  8 02:31 test.c
    -rw-r--r--. 1 root root 3072 May  8 02:31 test.db

INSERT 操作

下面的 C 代碼段顯示了如何在上面創(chuàng)建的 COMPANY 表中創(chuàng)建記錄:

    #include 
    #include 
    #include 

    static int callback(void *NotUsed, int argc, char **argv, char **azColName){
       int i;
       for(i=0; i<argc; i++){
          printf("%s = %sn", azColName[i], argv[i] ? argv[i] : "NULL");
       }
       printf("n");
       return 0;
    }

    int main(int argc, char* argv[])
    {
       sqlite3 *db;
       char *zErrMsg = 0;
       int rc;
       char *sql;

       /* Open database */
       rc = sqlite3_open("test.db", &db);
       if( rc ){
          fprintf(stderr, "Can't open database: %sn", sqlite3_errmsg(db));
          exit(0);
       }else{
          fprintf(stderr, "Opened database successfullyn");
       }

       /* Create SQL statement */
       sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "
             "VALUES (1, 'Paul', 32, 'California', 20000.00 ); "
             "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "
             "VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); "
             "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)"
             "VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );"
             "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)"
             "VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );";

       /* Execute SQL statement */
       rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
       if( rc != SQLITE_OK ){
          fprintf(stderr, "SQL error: %sn", zErrMsg);
          sqlite3_free(zErrMsg);
       }else{
          fprintf(stdout, "Records created successfullyn");
       }
       sqlite3_close(db);
       return 0;
    }

上述程序編譯和執(zhí)行時,它會在 COMPANY 表中創(chuàng)建給定記錄,并會顯示以下兩行:

    Opened database successfully
    Records created successfully

SELECT 操作

在我們開始講解獲取記錄的實例之前,讓我們先了解下回調函數(shù)的一些細節(jié),這將在我們的實例使用到。這個回調提供了一個從 SELECT 語句獲得結果的方式。它聲明如下:

    typedef int (*sqlite3_callback)(
    void*,    /* Data provided in the 4th argument of sqlite3_exec() */
    int,      /* The number of columns in row */
    char**,   /* An array of strings representing fields in the row */
    char**    /* An array of strings representing column names */
    );

如果上面的回調在 sqlite_exec() 程序中作為第三個參數(shù),那么 SQLite 將為 SQL 參數(shù)內(nèi)執(zhí)行的每個 SELECT 語句中處理的每個記錄調用這個回調函數(shù)。

下面的 C 代碼段顯示了如何從前面創(chuàng)建的 COMPANY 表中獲取并顯示記錄:

    #include 
    #include 
    #include 

    static int callback(void *data, int argc, char **argv, char **azColName){
       int i;
       fprintf(stderr, "%s: ", (const char*)data);
       for(i=0; i<argc; i++){
          printf("%s = %sn", azColName[i], argv[i] ? argv[i] : "NULL");
       }
       printf("n");
       return 0;
    }

    int main(int argc, char* argv[])
    {
       sqlite3 *db;
       char *zErrMsg = 0;
       int rc;
       char *sql;
       const char* data = "Callback function called";

       /* Open database */
       rc = sqlite3_open("test.db", &db);
       if( rc ){
          fprintf(stderr, "Can't open database: %sn", sqlite3_errmsg(db));
          exit(0);
       }else{
          fprintf(stderr, "Opened database successfullyn");
       }

       /* Create SQL statement */
       sql = "SELECT * from COMPANY";

       /* Execute SQL statement */
       rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
       if( rc != SQLITE_OK ){
          fprintf(stderr, "SQL error: %sn", zErrMsg);
          sqlite3_free(zErrMsg);
       }else{
          fprintf(stdout, "Operation done successfullyn");
       }
       sqlite3_close(db);
       return 0;
    }

上述程序編譯和執(zhí)行時,它會產(chǎn)生以下結果:

    Opened database successfully
    Callback function called: ID = 1
    NAME = Paul
    AGE = 32
    ADDRESS = California
    SALARY = 20000.0

    Callback function called: ID = 2
    NAME = Allen
    AGE = 25
    ADDRESS = Texas
    SALARY = 15000.0

    Callback function called: ID = 3
    NAME = Teddy
    AGE = 23
    ADDRESS = Norway
    SALARY = 20000.0

    Callback function called: ID = 4
    NAME = Mark
    AGE = 25
    ADDRESS = Rich-Mond
    SALARY = 65000.0

    Operation done successfully

UPDATE 操作

下面的 C 代碼段顯示了如何使用 UPDATE 語句來更新任何記錄,然后從 COMPANY 表中獲取并顯示更新的記錄:

    #include 
    #include 
    #include 

    static int callback(void *data, int argc, char **argv, char **azColName){
       int i;
       fprintf(stderr, "%s: ", (const char*)data);
       for(i=0; i<argc; i++){
          printf("%s = %sn", azColName[i], argv[i] ? argv[i] : "NULL");
       }
       printf("n");
       return 0;
    }

    int main(int argc, char* argv[])
    {
       sqlite3 *db;
       char *zErrMsg = 0;
       int rc;
       char *sql;
       const char* data = "Callback function called";

       /* Open database */
       rc = sqlite3_open("test.db", &db);
       if( rc ){
          fprintf(stderr, "Can't open database: %sn", sqlite3_errmsg(db));
          exit(0);
       }else{
          fprintf(stderr, "Opened database successfullyn");
       }

       /* Create merged SQL statement */
       sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=1; "
             "SELECT * from COMPANY";

       /* Execute SQL statement */
       rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
       if( rc != SQLITE_OK ){
          fprintf(stderr, "SQL error: %sn", zErrMsg);
          sqlite3_free(zErrMsg);
       }else{
          fprintf(stdout, "Operation done successfullyn");
       }
       sqlite3_close(db);
       return 0;
    }

上述程序編譯和執(zhí)行時,它會產(chǎn)生以下結果:

    Opened database successfully
    Callback function called: ID = 1
    NAME = Paul
    AGE = 32
    ADDRESS = California
    SALARY = 25000.0

    Callback function called: ID = 2
    NAME = Allen
    AGE = 25
    ADDRESS = Texas
    SALARY = 15000.0

    Callback function called: ID = 3
    NAME = Teddy
    AGE = 23
    ADDRESS = Norway
    SALARY = 20000.0

    Callback function called: ID = 4
    NAME = Mark
    AGE = 25
    ADDRESS = Rich-Mond
    SALARY = 65000.0

    Operation done successfully

DELETE 操作

下面的 C 代碼段顯示了如何使用 DELETE 語句刪除任何記錄,然后從 COMPANY 表中獲取并顯示剩余的記錄:

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

static int callback(void *data, int argc, char **argv, char **azColName){
   int i;
   fprintf(stderr, "%s: ", (const char*)data);
   for(i=0; i<argc; i++){
      printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
   }
   printf("\n");
   return 0;
}

int main(int argc, char* argv[])
{
   sqlite3 *db;
   char *zErrMsg = 0;
   int rc;
   char *sql;
   const char* data = "Callback function called";

   /* Open database */
   rc = sqlite3_open("test.db", &db);
   if( rc ){
      fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
      exit(0);
   }else{
      fprintf(stderr, "Opened database successfully\n");
   }

   /* Create merged SQL statement */
   sql = "DELETE from COMPANY where ID=2; " \
         "SELECT * from COMPANY";

   /* Execute SQL statement */
   rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
   if( rc != SQLITE_OK ){
      fprintf(stderr, "SQL error: %s\n", zErrMsg);
      sqlite3_free(zErrMsg);
   }else{
      fprintf(stdout, "Operation done successfully\n");
   }
   sqlite3_close(db);
   return 0;
}

上述程序編譯和執(zhí)行時,它會產(chǎn)生以下結果:

Opened database successfully
Callback function called: ID = 1
NAME = Paul
AGE = 32
ADDRESS = California
SALARY = 20000.0

Callback function called: ID = 3
NAME = Teddy
AGE = 23
ADDRESS = Norway
SALARY = 20000.0

Callback function called: ID = 4
NAME = Mark
AGE = 25
ADDRESS = Rich-Mond
SALARY = 65000.0

Operation done successfully
上一篇:SQLite – PHP下一篇:SQLite 表達式