1.入手&準備
1.1. 入手
sqlite3本体はC言語で作成されたため、VC++のMFCプログラム、Win32プロジェクト、
及びWin32コンソールプログラムに適用します。本文ではMFCのダイアログプログラムを使用します。
サンプルの作成環境は以下の通りです。
- Microsoft Visual Studio 2008 Professional Edition 英語版
- Windows 7 英語評価版
SQLiteの公式サイトから以下二つのファイルをダウンロードしてください。
- sqlite-amalgamation-3_6_22.zip コンパイラ用のSQLiteソースコード
- sqlite-3_6_22.zip WindowsプラントフォームでのSQLite管理用コンソールツール
1.2. 準備
Microsoft Visual Studio 2008で、下図のようにMFCのダイアログのプログラムを作成してください。
ダウンロードしたsqlite-amalgamation-3_6_22.zipを解凍すると、以下の三つのファイルがあります。
- sqlite3.c
- sqlite3.h
- sqlite3ext.h
この三つのファイルをプロジェクトに追加してください。追加のプロジェクト構成は以下の通りです。
また、コンパイルのためSQLite3.cのPrecompiled Headersを使わないように設定する必要があります。
- sqlite3.cを選択して、右クリックで「プロパティー」を選択してください。
- 下図のように、Precompiled Headersの設定をNot Using Precompiled Headersに設定してください。
再度プロジェクトをコンパイルしてみてください。
1.3. テーブルの新規作成
sqlite-3_6_22.zipを解凍して、sqlite3.exeファイルを1.2で作成したプログラムのフォルダーにコピーしてください。
MS-DOSで以下のコマンドを実行してください。
C:\VCSQLiteTraining> sqlite3 test.db
テーブル新規作成のSQLコマンドを実行します。
CREATE TABLE Names ( name NVARCHAR(255) NOT NULL PRIMARY KEY );
一番後ろの「;」が必要です。
2.概念&基本操作
2.1. sqlite3の基本
SQLiteの使用には、ほとんどすべての操作で以下の二つのオブジェクトが必要です。
- データベースオブジェクト(Database Connection) 構造体名:
sqlite3
- コンパイルステートメント(Prepared Statement) 構造体名:
sqlite3_stmt
データベースオブジェクトは、データベース全体を制御するためのオブジェクトです。
コンパイルステートメントはデータベースオブジェクトから作成され、SQLの実行操作を主な役割としています。
一般的に、以下のような関数と手順でSQL操作を行います。
1) | sqlite3_open | データベースを開く。 | |
2) | sqlite3_prepare | ステートメントを作成する。 | |
3) | sqlite3_bind | SQLに埋めたパラメータを設定する。 | |
4) | sqlite3_step | SQLを実行する。 | |
5) | sqlite3_column | 実行後のレコードからカラムを取得する。 | |
6) | sqlite3_finalize | ステートメントを削除する。 | |
7) | sqlite3_close | データベースをクローズする。 |
2.2. データベースを開く
まずデータベースオブジェクトのポインタを宣言します。
sqlite3* db;
作成したポインタを引数として、sqlite3_open
関数を使用します。
指定したファイル名引数としてデータベースを開きます。
指定ファイルが存在しない場合は、エラーが発生せず新しいデータベースが自動的に作成されます。
パスを指定しない場合は、VC++プロジェクトのソースが格納されたフォルダーまたはアプリケーションが起動するフォルダーをデフォルトとします。
int rc = sqlite3_open( "test.db", &db );
日本語が含まれるパスを渡す場合は、Unicodeに対応するsqlite3_open16関数を推奨します。
int rc = sqlite3_open16( L"データベース.db", &db );
操作が成功した場合は、SQLITE_OKが返されます。エラーが発生した場合エラーコードが返されます。(エラーコード詳細はこちら。)
この関数と同じ、sqlite3
では関数名の後ろに16を付けるのはUnicodeに対応する意味です。
2.3. データベースを閉じる
sqlite3_open
で作成されたデータベースオブジェクトを引数として、sqlite3_close
を使用するとデータベースがクローズされます。
sqlite3_close( db );
2.4. コンパイラステートメントの作成
指定SQLを引数としてsqlite3_prepareを使用すると、SQLがコンパイラされます。SQLがコンパイラされた後にコンパイラステートメントが作成されます。
sqlite3_stmt* stmt; /* コンパイラステートメントポインタを宣言する。 */ sqlite3_prepare( db, SQL文字列, SQL文字列長さ, &stmt );
SQL文字列がUnicodeの場合sqlite3_prepare16を使用する必要があります。SQL文字列長さが-1の場合SQL文字列の長さが自動的に判定されます。
2.5. コンパイラステートメントの破棄
sqlite3_finalize
を使用して破棄します。
sqlite3_finalize( stmt );
[次のページへ]
One thought to “SQLite使用説明(VC++言語)(1)”