首頁 > 後端開發 > C++ > 主體

使用C/C++和SQLite的SQL

WBOY
發布: 2023-09-19 19:49:02
轉載
767 人瀏覽過

使用C/C++和SQLite的SQL

在本節中,您將學習如何在 C/C 程式中使用 SQLite。

安裝

在開始在 C/C 程式中使用 SQLite 之前,您需要確保您的電腦上設定了 SQLite 程式庫。您可以查看SQLite安裝章節來了解安裝過程。

C/C 介面API

以下是重要的C/C SQLite介面例程,可滿足您使用SQLite的要求來自您的 C/C 程式的資料庫。如果您正在尋找更複雜的應用程序,那麼您可以查看SQLite官方文件。

##1如果檔案名稱不是NULL ,sqlite3_open() 嘗試使用其值開啟資料庫檔案。如果不存在該名稱的文件,sqlite3_open() 將開啟該名稱的新資料庫檔案。 SQLite3_exec () 例程解析並執行 sql 參數中給出的每個命令,直到到達字串末尾或遇到錯誤。 如果仍有任何查詢尚未完成,sqlite3_close() 將傳回 SQLITE_BUSY 並顯示錯誤訊息由於未完成的語句,無法關閉。
序號 #API 及說明

sqlite3_open(const char *filename, sqlite3 **ppDb)
登入後複製
此例程開啟一個到SQLite 資料庫檔案的連接,並傳回一個資料庫連接物件以供其他SQLite 例程使用。

如果

filename

參數為NULL或':memory:',sqlite3_open()將在RAM中建立一個記憶體資料庫,該資料庫僅在會話期間持續。

2

sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)
登入後複製
此程式提供了一種快速、簡單的方法來執行sql 參數提供的SQL 指令,該參數可以包含多個SQL 指令。 < /em>

這裡,第一個參數

sqlite3 是一個打開的資料庫對象,sqlite_callback 是一個回調,其中data 是第一個參數,並且將返回errmsg 以捕獲例程引發的任何錯誤。

3

sqlite3_close(sqlite3*)
登入後複製
此例程關閉先前透過呼叫 sqlite3_open() 開啟的資料庫連線。與連線相關的所有準備好的語句應在關閉連線之前完成。

連接到資料庫

以下 C 程式碼片段顯示如何連接到現有資料庫。如果資料庫不存在,則建立資料庫,最後傳回資料庫物件。

範例程式碼

#include <stdio.h>
#include <sqlite3.h>
int main(int argc, char* argv[]) {
   sqlite3 *db;
   char *zErrMsg = 0;
   int rc;
   rc = sqlite3_open("test.db", &db);
   if( rc ) {
      fprintf(stderr, "Can&#39;t open database: %s\n", sqlite3_errmsg(db));
      return(0);
   } else {
      fprintf(stderr, "Opened database successfully\n");
   }
   sqlite3_close(db);
}
登入後複製

輸出

$gcc test.c -l sqlite3
$./a.out
Opened database successfully
登入後複製

建立表格

以下C 程式碼片段將用於在先前建立的資料庫中建立表格-

範例程式碼

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
static int callback(void *NotUsed, int argc, char **argv, char **azColName) {
   int i;
   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;
   /* Open database */
   rc = sqlite3_open("test.db", &db);
   if( rc ) {
      fprintf(stderr, "Can&#39;t open database: %s\n", sqlite3_errmsg(db));
      return(0);
   } else {
      fprintf(stdout, "Opened database successfully\n");
   }
   /* 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: %s\n", zErrMsg);
      sqlite3_free(zErrMsg);
   } else {
      fprintf(stdout, "Table created successfully\n");
   }
   sqlite3_close(db);
   return 0;
}
登入後複製

輸出(檢查資料庫檔案狀態):

-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
登入後複製

插入操作

以下C 程式碼片段顯示如何在上例中建立的COMPANY 表中建立記錄–

範例程式碼

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
static int callback(void *NotUsed, int argc, char **argv, char **azColName) {
   int i;
   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;
   /* Open database */
   rc = sqlite3_open("test.db", &db);
   if( rc ) {
      fprintf(stderr, "Can&#39;t open database: %s\n", sqlite3_errmsg(db));
      return(0);
   } else {
      fprintf(stderr, "Opened database successfully\n");
   }
   /* Create SQL statement */
   sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \
      "VALUES (1, &#39;Paul&#39;, 32, &#39;California&#39;, 20000.00 ); " \
      "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \
      "VALUES (2, &#39;Allen&#39;, 25, &#39;Texas&#39;, 15000.00 ); " \
      "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \
      "VALUES (3, &#39;Teddy&#39;, 23, &#39;Norway&#39;, 20000.00 );" \
      "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \
      "VALUES (4, &#39;Mark&#39;, 25, &#39;Rich-Mond &#39;, 65000.00 );";
   /* Execute SQL statement */
   rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
   if( rc != SQLITE_OK ) {
      fprintf(stderr, "SQL error: %s\n", zErrMsg);
      sqlite3_free(zErrMsg);
   } else {
      fprintf(stdout, "Records created successfully\n");
   }
   sqlite3_close(db);
   return 0;
}
登入後複製

輸出

Opened database successfully
Records created successfully
登入後複製

SELECT 操作

在繼續取得記錄的實際範例之前,讓我們先來看看相關範例中使用的回調函數的一些詳細資訊。此回呼提供了一種從 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() 例程中提供上述回呼作為第三個參數,SQLite 將為SQL 參數內執行的每個SELECT 語句中處理的每個記錄呼叫此回調函數。

以下 C 程式碼片段顯示如何從上例中建立的 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&#39;t open database: %s\n", sqlite3_errmsg(db));
      return(0);
   } else {
      fprintf(stderr, "Opened database successfully\n");
   }
   /* 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: %s\n", zErrMsg);
      sqlite3_free(zErrMsg);
   } else {
      fprintf(stdout, "Operation done successfully\n");
   }
   sqlite3_close(db);
   return 0;
}
登入後複製
###輸出###
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
登入後複製
###

以上是使用C/C++和SQLite的SQL的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板