ホームページ  >  記事  >  バックエンド開発  >  C/C++ および SQLite を使用した SQL

C/C++ および SQLite を使用した SQL

WBOY
WBOY転載
2023-09-19 19:49:02758ブラウズ

C/C++ および SQLite を使用した SQL

このセクションでは、C/C プログラムで SQLite を使用する方法を学習します。

インストール

C/C プログラムで SQLite の使用を開始する前に、SQLite ライブラリがコンピュータにセットアップされていることを確認する必要があります。 SQLite インストールの章を参照して、インストール プロセスを理解できます。

C/C インターフェイス API

以下は、C/C プログラムから SQLite データベースを使用するための要件を満たすことができる重要な C/C SQLite インターフェイス ルーチンです。より複雑なアプリケーションを探している場合は、SQLite の公式ドキュメントを確認してください。

シリアル番号 API と説明
1
sqlite3_open(const char *filename, sqlite3 **ppDb)
このルーチンは、SQLite データベース ファイルへの接続を開き、他の SQLite ルーチンで使用するデータベース接続オブジェクトを返します。

filename パラメータが NULL または ':memory:' の場合、sqlite3_open() は RAM にインメモリ データベースを作成します。セッション。

ファイル名が NULL でない場合、sqlite3_open() はその値を使用してデータベース ファイルを開こうとします。その名前のファイルが存在しない場合、sqlite3_open() はその名前の新しいデータベース ファイルを開きます。

2
sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)
このルーチンは、sql パラメータで指定された SQL コマンドを実行するための迅速かつ簡単な方法を提供します。これには複数の SQL コマンドを含めることができます。 。

ここで、最初のパラメータ sqlite3 はオープン データベース オブジェクト、sqlite_callback はコールバック、data が最初のパラメータ、errmsg が Catch any に返されます。ルーチンによって発生したエラー。

SQLite3_exec () ルーチンは、文字列の末尾に到達するかエラーが発生するまで、sql 引数で指定された各コマンドを解析して実行します。

3
sqlite3_close(sqlite3*)
このルーチンは、sqlite3_open() を呼び出して以前に開かれたデータベース接続を閉じます。接続に関連するすべての準備されたステートメントは、接続を閉じる前に完了する必要があります。

未処理のクエリがある場合、sqlite3_close() は SQLITE_BUSY を返し、「ステートメントが完了していないため閉じることができません」というエラー メッセージを表示します。

#データベースへの接続

次の 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() ルーチンの 3 番目のパラメーターとして指定されている場合、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。