SQLiteの - C / C ++
インストール
SQLiteのを使用する前に、C / C ++プログラムでは、我々はマシン上の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 中创建一个内存数据库,这只会在 session 的有效时间内持续。 如果文件名 filename 不为 NULL,那么 sqlite3_open() 将使用这个参数值尝试打开数据库文件。如果该名称的文件不存在,sqlite3_open() 将创建一个新的命名为该名称的数据库文件并打开。 |
2 | sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg) 该例程提供了一个执行 SQL 命令的快捷方式,SQL 命令由 sql 参数提供,可以由多个 SQL 命令组成。 在这里,第一个参数sqlite3是打开的数据库对象,sqlite_callback是一个回调,data作为其第一个参数,errmsg 将被返回用来获取程序生成的任何错误。 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のの*のデシベル。 char型* zErrMsg = 0; int型のrc; RC = sqlite3_open( "test.dbという"、&デシベル); {(RC)の場合 関数fprintf(stderrに、 "開けませんデータベース:%sのを\ n"、sqlite3_errmsg(デシベル)); 出口(0); }エルス{ 関数fprintf(stderrに、「開かれたデータベースが正常に\ n "); } sqlite3_close(DB)。 }
それでは、現在のディレクトリにある当社のデータベースtest.dbというを作成し、上記のプログラムをコンパイルして実行してみましょう。 必要に応じてパスを変更することができます。
$のgcc test.cの-l sqlite3の $。/ a.outの データベース正常にオープン
あなたがC ++ソースコードを使用したい場合は、次のコードに合わせて示してコンパイルすることができます。
$ G ++ test.cの-l sqlite3の
ここでは、Cプログラムのための私達のプログラムのリンクsqlite3のライブラリが必要な機能を提供します。 これは、次のような結果を得るでしょう、あなたのディレクトリにデータベースファイルtest.dbというを作成します。
-rwxr-XR-xの1ルートルート7383 5月8日2時06分のa.out -rw-rを - r--の1ルートルート323 5月8日午前2時05分test.c. -rw-rを - r--の1ルートルート0 5月8日午前2時06分test.db.
テーブルを作成します。
次のCコードスニペットは、以前に作成したデータベースにテーブルを作成するために使用されます。
書式#include <stdio.hに> 書式#include <stdlib.h>に含ま 書式#include <sqlite3.h> 静的なint型のコールバック(void *型NOTUSED、int型のargc、char型** argvの、char型** azColName){ 私はint型。 以下のための(ⅰ= 0; I&LT;のargc; iは++){ printf( "%sの=%sの\ n"は、azColName [i]は、ARGV [i]はARGV [i]は:? "NULL"); } printf( "\ n")を。 0を返します。 } int型のmain(int型のARGC、char型*のARGV []) { sqlite3のの*のデシベル。 char型* zErrMsg = 0; int型のrc; char *のSQL。 / *データベースをオープン* / RC = sqlite3_open( "test.dbという"、&デシベル); {(RC)の場合 関数fprintf(stderrに、 "開けませんデータベース:%sのを\ n"、sqlite3_errmsg(デシベル)); 出口(0); }エルス{ 関数fprintf(stdoutに、「開かれたデータベースが正常に\ n "); } / * SQL文を作成します* / SQL = \ "(表会社を作成」 「ID INT PRIMARY KEY、NOT NULL、 "\ 「名前テキスト、NOT NULL、 "\ "NOT NULLとAGEのINT、" \ 「アドレスCHAR(50)、 "\ 「SALARYのREAL); "; / * * SQL文を実行/ RC = sqlite3_exec(デシベル、SQL、コールバック、0、&zErrMsg); 場合(RC!= SQLITE_OK){ 関数fprintf(stderrに、「SQLエラー:%sの\ nを "、zErrMsg)。 sqlite3_free(zErrMsg)。 }エルス{ 関数fprintf(stdoutに、「N \正常に作成表 "); } sqlite3_close(DB)。 0を返します。 }
上記のプログラムをコンパイルして実行すると、次のように、test.dbというファイル内のファイルの最終リストをCOMPANYテーブルを作成します。
-rwxr-XR-xの1ルートルート9567 5月8日午前2時31 a.outの -rw-rを - r--の1ルートルート1207年5月8日午前2時31 test.c. -rw-rを - r--の1ルートルート3072 5月8日午前2時31 test.db.
INSERT操作
次のCコードスニペットは、上記で作成した会社テーブル内のレコードを作成する方法を示しています。
書式#include <stdio.hに> 書式#include <stdlib.h>に含ま 書式#include <sqlite3.h> 静的なint型のコールバック(void *型NOTUSED、int型のargc、char型** argvの、char型** azColName){ 私はint型。 以下のための(ⅰ= 0; I&LT;のargc; iは++){ printf( "%sの=%sの\ n"は、azColName [i]は、ARGV [i]はARGV [i]は:? "NULL"); } printf( "\ n")を。 0を返します。 } int型のmain(int型のARGC、char型*のARGV []) { sqlite3のの*のデシベル。 char型* zErrMsg = 0; int型のrc; char *のSQL。 / *データベースをオープン* / RC = sqlite3_open( "test.dbという"、&デシベル); {(RC)の場合 関数fprintf(stderrに、 "開けませんデータベース:%sのを\ n"、sqlite3_errmsg(デシベル)); 出口(0); }エルス{ 関数fprintf(stderrに、「開かれたデータベースが正常に\ n "); } / * SQL文を作成します* / SQL = "COMPANYのINSERT INTO(ID、名前、年齢、住所、給与)」\ 「VALUES(1、 'ポール'、32、 'カリフォルニア'、20000.00); "\ 「COMPANY INTO(ID、名前、年齢、住所、SALARY)を挿入」\ 「VALUES(2、 'アレン'、25、 'テキサス'、15000.00); "\ 「COMPANY INTO(ID、名前、年齢、住所、SALARY)を挿入」\ 「VALUES(3、 'テディ'、23、 'ノルウェー'、20000.00); "\ 「COMPANY INTO(ID、名前、年齢、住所、SALARY)を挿入」\ "VALUES(4、 'マーク'、25、 'リッチモンド」、65000.00);"; / * * SQL文を実行/ RC = sqlite3_exec(デシベル、SQL、コールバック、0、&zErrMsg); 場合(RC!= SQLITE_OK){ 関数fprintf(stderrに、「SQLエラー:%sの\ nを "、zErrMsg)。 sqlite3_free(zErrMsg)。 }エルス{ 関数fprintf(stdoutに、「\ nを正常に作成レコード "); } sqlite3_close(DB)。 0を返します。 }
上記のプログラムをコンパイルして実行されると、それは与えられたレコードの会社テーブルに作成して、次の2行が表示されます:
データベース正常にオープン 正常に作成されたレコード
SELECT操作
私たちが記録された例を説明する始める前に、私たちが最初に私たちの例では、使用することになり、コールバック関数の詳細のいくつかを理解しましょう。 このコールバックは、SELECT文法から得られた結果を提供します。 これは次のように宣言されます。
typedef int型(* sqlite3_callback)( sqlite3_execの第四引数(で提供空隙*、/ *データ)* / int型、/ *行の列数* / char型**、/ *行のフィールドを表す文字列の配列* / char型** / *列名を表す文字列の配列* / );
sqlite_exec()プロシージャ内の第三のパラメータとして上記のコールバックは、各SELECTステートメントの実行プロセスのパラメータ内の各レコードのSQLiteのSQLは、コールバック関数を呼び出す場合。
次のCコードスニペットは、以前に作成したCOMPANYテーブルから取得する方法を示していますし、レコードを表示します。
書式#include <stdio.hに> 書式#include <stdlib.h>に含ま 書式#include <sqlite3.h> 静的なint型のコールバック(void *型のデータ、int型のargc、char型** argvの、char型** azColName){ 私はint型。 関数fprintf(stderrに、 "%sの:"、(constのchar型*)データ); 以下のための(ⅰ= 0; I&LT;のargc; iは++){ printf( "%sの=%sの\ n"は、azColName [i]は、ARGV [i]はARGV [i]は:? "NULL"); } printf( "\ n")を。 0を返します。 } int型のmain(int型のARGC、char型*のARGV []) { sqlite3のの*のデシベル。 char型* zErrMsg = 0; int型のrc; char *のSQL。 constのchar *データ= "と呼ばれるコールバック関数」。 / *データベースをオープン* / RC = sqlite3_open( "test.dbという"、&デシベル); {(RC)の場合 関数fprintf(stderrに、 "開けませんデータベース:%sのを\ n"、sqlite3_errmsg(デシベル)); 出口(0); }エルス{ 関数fprintf(stderrに、「開かれたデータベースが正常に\ n "); } / * SQL文を作成します* / SQL = "COMPANYからのSELECT *"; / * * SQL文を実行/ RC = sqlite3_exec(デシベル、SQL、コールバック、(void *型)データ、&zErrMsg); 場合(RC!= SQLITE_OK){ 関数fprintf(stderrに、「SQLエラー:%sの\ nを "、zErrMsg)。 sqlite3_free(zErrMsg)。 }エルス{ 関数fprintf(stdoutに、「N \成功した操作 "); } sqlite3_close(DB)。 0を返します。 }
上記のプログラムをコンパイルして実行されると、次の結果を生成します。
データベース正常にオープン ID = 1:と呼ばれるコールバック関数 NAME =ポール AGE = 32 ADDRESS =カリフォルニア州 SALARY = 20000.0 ID = 2:と呼ばれるコールバック関数 NAME =アレン AGE = 25 ADDRESS =テキサス州 SALARY = 15000.0 ID = 3:と呼ばれるコールバック関数 NAME =テディ AGE = 23 ADDRESS =ノルウェー SALARY = 20000.0 ID = 4:と呼ばれるコールバック関数 NAME =マーク AGE = 25 ADDRESS =リッチモンド SALARY = 65000.0 操作が正常に行われ
UPDATE操作
次のCコードスニペットは、その後、任意のレコードを更新COMPANYテーブルから取得し、更新されたレコードを表示するには、UPDATEステートメントを使用する方法を示しています。
書式#include <stdio.hに> 書式#include <stdlib.h>に含ま 書式#include <sqlite3.h> 静的なint型のコールバック(void *型のデータ、int型のargc、char型** argvの、char型** azColName){ 私はint型。 関数fprintf(stderrに、 "%sの:"、(constのchar型*)データ); 以下のための(ⅰ= 0; I&LT;のargc; iは++){ printf( "%sの=%sの\ n"は、azColName [i]は、ARGV [i]はARGV [i]は:? "NULL"); } printf( "\ n")を。 0を返します。 } int型のmain(int型のARGC、char型*のARGV []) { sqlite3のの*のデシベル。 char型* zErrMsg = 0; int型のrc; char *のSQL。 constのchar *データ= "と呼ばれるコールバック関数」。 / *データベースをオープン* / RC = sqlite3_open( "test.dbという"、&デシベル); {(RC)の場合 関数fprintf(stderrに、 "開けませんデータベース:%sのを\ n"、sqlite3_errmsg(デシベル)); 出口(0); }エルス{ 関数fprintf(stderrに、「開かれたデータベースが正常に\ n "); } / *マージされたSQL文を作成します* / SQL = "UPDATE会社がSALARY = 25000.00を設定する場所ID = 1;" \ 「COMPANYからのSELECT * "; / * * SQL文を実行/ RC = sqlite3_exec(デシベル、SQL、コールバック、(void *型)データ、&zErrMsg); 場合(RC!= SQLITE_OK){ 関数fprintf(stderrに、「SQLエラー:%sの\ nを "、zErrMsg)。 sqlite3_free(zErrMsg)。 }エルス{ 関数fprintf(stdoutに、「N \成功した操作 "); } sqlite3_close(DB)。 0を返します。 }
上記のプログラムをコンパイルして実行されると、次の結果を生成します。
データベース正常にオープン ID = 1:と呼ばれるコールバック関数 NAME =ポール AGE = 32 ADDRESS =カリフォルニア州 SALARY = 25000.0 ID = 2:と呼ばれるコールバック関数 NAME =アレン AGE = 25 ADDRESS =テキサス州 SALARY = 15000.0 ID = 3:と呼ばれるコールバック関数 NAME =テディ AGE = 23 ADDRESS =ノルウェー SALARY = 20000.0 ID = 4:と呼ばれるコールバック関数 NAME =マーク AGE = 25 ADDRESS =リッチモンド SALARY = 65000.0 操作が正常に行われ
DELETE操作
次のCコードスニペットは、DELETEステートメントを使用する方法を示しレコードをすべて削除し、その後COMPANYテーブルから取り出され、残りの記録が表示されます。
書式#include <stdio.hに> 書式#include <stdlib.h>に含ま 書式#include <sqlite3.h> 静的なint型のコールバック(void *型のデータ、int型のargc、char型** argvの、char型** azColName){ 私はint型。 関数fprintf(stderrに、 "%sの:"、(constのchar型*)データ); 以下のための(ⅰ= 0; iは<のargc; iは++){ printf( "%sの=%sの\ n"は、azColName [i]は、ARGV [i]はARGV [i]は:? "NULL"); } printf( "\ n")を。 0を返します。 } int型のmain(int型のARGC、char型*のARGV []) { sqlite3のの*のデシベル。 char型* zErrMsg = 0; int型のrc; char *のSQL。 constのchar *データ= "と呼ばれるコールバック関数」。 / *データベースをオープン* / RC = sqlite3_open( "test.dbという"、&デシベル); {(RC)の場合 関数fprintf(stderrに、 "開けませんデータベース:%sのを\ n"、sqlite3_errmsg(デシベル)); 出口(0); }エルス{ 関数fprintf(stderrに、「開かれたデータベースが正常に\ n "); } / *マージされたSQL文を作成します* / SQLは= "ID = 2 COMPANYから削除します。" \ 「COMPANYからのSELECT * "; / * * SQL文を実行/ RC = sqlite3_exec(デシベル、SQL、コールバック、(void *型)データ、&zErrMsg); 場合(RC!= SQLITE_OK){ 関数fprintf(stderrに、「SQLエラー:%sの\ nを "、zErrMsg)。 sqlite3_free(zErrMsg)。 }エルス{ 関数fprintf(stdoutに、「N \成功した操作 "); } sqlite3_close(DB)。 0を返します。 }
上記のプログラムをコンパイルして実行されると、次の結果を生成します。
データベース正常にオープン ID = 1:と呼ばれるコールバック関数 NAME =ポール AGE = 32 ADDRESS =カリフォルニア州 SALARY = 20000.0 ID = 3:と呼ばれるコールバック関数 NAME =テディ AGE = 23 ADDRESS =ノルウェー SALARY = 20000.0 ID = 4:と呼ばれるコールバック関数 NAME =マーク AGE = 25 ADDRESS =リッチモンド SALARY = 65000.0 操作が正常に行われ