Skip to main content

SQLite使用説明(VC++言語)(1)

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のダイアログのプログラムを作成してください。

01CreateDialogProject

ダウンロードしたsqlite-amalgamation-3_6_22.zipを解凍すると、以下の三つのファイルがあります。

  • sqlite3.c
  • sqlite3.h
  • sqlite3ext.h

この三つのファイルをプロジェクトに追加してください。追加のプロジェクト構成は以下の通りです。

011explorer

また、コンパイルのためSQLite3.cのPrecompiled Headersを使わないように設定する必要があります。

  1. sqlite3.cを選択して、右クリックで「プロパティー」を選択してください。
  2. 下図のように、Precompiled Headersの設定をNot Using Precompiled Headersに設定してください。

013pbhsetting

再度プロジェクトをコンパイルしてみてください。

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 );

[次のページへ]

Jingwood

北海道の田舎で暮らしているプログラマーです。最近山登りにハマりました。

One thought to “SQLite使用説明(VC++言語)(1)”

Leave a Reply

Your email address will not be published. Required fields are marked *