[0]mitc - 日記
2007/06/22(金)C#からSQLiteを使ってみた
■SQLite
SQLiteについては,Wikipedia参照.
簡単に書くと,ファイルを読み書きする感覚で扱えるRDBMSです.
SQLite公式
http://www.sqlite.org/
■System.Data.SQLite
SQLiteは,PHP5に標準添付されているので,PHPのものという意識が強いかもしれません.
しかし,実際にはC言語で書かれておりdll版も存在します.
とはいえそこはアンマネージドコード..NETから直接は呼び出せません.
MeCabの時のようにラッパを作ればいいんですが,私にはラッパを作る知識などが足りていません.
そんなわけで,.NETからSQLiteを呼び出すためのクラスライブラリを紹介します.
System.Data.SQLiteといういかにもそれらしい名前のライブラリは,
単なるラッパではなく,何ともともとC言語で書かれているSQLiteのコードを
C#によってADO.NET2.0に対応するように1から書き直して作られています.*1
まさにSQLite.NETと呼ぶにふさわしいと言えるでしょう.
公式サイトの記載によると次の特徴があるらしいです*2
- ADO.NET2.0の実装
- 本家sqlite3.dllとの完全な互換性
- データベースファイルの可搬性
- Visual Studio 2005 Design-Timeをサポート
- Design-Timeってなんなんでしょ……これはわかりませんでした
- 500kb以下の再頒布可能な単体ファイル
- 単なるラッパならラッパdllとは別に本家dllも必要ですが,このライブラリは機能を内部に含むので単体で使用できます
- 暗号化機能をサポート
- パブリックドメイン
- 本家SQLiteはパブリックドメインですが,このSystem.Data.SQLiteもパブリックドメインなので商用非商用問わず完全に著作権フリーで使えます
System.Data.SQLite
http://sqlite.phxsoftware.com/
インストールと言っても,実際はdllさえあればいいんですが,
上で良くわからないと書いたDesign-Timeを使えるようにするには,
配布されているインストーラでインストールする必要があるようです.
そんなものはいらないって方と自分のためにこのページの下部にdllとインテリセンスをきかせるためのxmlファイルを圧縮したものを置いておきます.
ダウンロード~インストールは簡単で,公式サイトの右側にある「Downloads」のところにあるリンクから最新版をダウンロードします.
SQLite for ADO.NET 2.0とSQLite for ADO.NET vNextがありますが,選ぶのは前者の SQLite-1.0.43.0-binary.exeです.
ダウンロードしたら,その実行ファイルがインストーラなので画面の指示に従って普通にインストールして下さい.
インストール先のフォルダを開くと色々入っていますが,必要なのはSQLite.NET/binフォルダに入っているSystem.Data.SQLite.DLL(本体)とSystem.Data.SQLite.XML(インテリセンス用定義ファイル)のみです.
これらをSQLiteを使いたい.NETプロジェクトのフォルダにコピーでもして参照に追加すれば使用準備はOK.
参照への追加方法は,本日記のC#から形態素解析器のMeCabを呼び出してみた辺りに書いたりしました.
名前空間は……多分推測通りだと思いますが,System.Data.SQLiteです.わかりやすくていいですね.
公式サイトのフォーラムを引用*3
using (SQLiteConnection cnn = new SQLiteConnection("Data Source=mydatabase.db"))
using (SQLiteCommand cmd = cnn.CreateCommand())
{
cnn.Open();
// CREATE文の実行
cmd.CommandText = "CREATE TABLE FOO (ID INTEGER PRIMARY KEY, MyValue NVARCHAR(256))";
cmd.ExecuteNonQuery(); // Create the table, don't expect returned data
// INSERT文の実行
cmd.CommandText = "INSERT INTO FOO (MyValue) VALUES('Hello World')";
cmd.ExecuteNonQuery();
// SELECT文の実行
cmd.CommandText = "SELECT * FROM FOO";
using (SQLiteDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine(String.Format("ID = {0}, MyValue = {1}", reader[0], reader[1]));
}
}
}
SQLiteの接続文字列は,使用するDBファイルを指定するだけです.
その他の使用方法は,ADO.NETに沿っています.
この例を見るに,PRIMARY KEYに何も指定しないでINSERTすると自動的に連番が振られるのかも.
- System.Data.SQLite - Help - need example for select
- http://sqlite.phxsoftware.com/forums/thread/3324.aspx
*1 : 2009/07/16:ソースコードをダウンロードして確認したら,内部にC言語で書かれたSQLite本体のソースコードを持っていたのでラッパ+ADO.NET対応を一括で行っているDLLと考えた方が良い?ちょっとわからなかったですがこの表現は間違いだったかも
*2 : 誤訳があるかも…….本家の持つ特徴を書いてある部分は除いてます
*3 : ただしバグがあったので一部修正しているのと,コメントを日本語にしています
■SQLite ControlCenter 日本語版
データベースを色々いじっているとデータベースファイルの中身がどうなっているかを覗くためのツールが欲しくなるものです.
値の更新処理をした時に本当に更新されているかを確認したり,
挙動がおかしい時にDBの中身がおかしくなっていないかを確認したり,
テストデータを入れるのに使ったり.
SQL ServerならEnterprise Manager,PostgreSQLならPgAdminなど,
DBMSによって色々なツールが存在しますが,
SQLiteはその性質上簡単にそのようなツールが作れるのでかなりの種類があるようです.
ただ,やっぱり海外産だと日本語の扱いを考慮していなかったりして使えるものが限定されてくるようで…….
とりあえず,今はLite ControlCenterの日本語版を使ってます.
これがいいのか悪いのかは他と比較していないのでわかりませんが,とりあえず普通に使えてます.
- SQLite CVSTrac
- http://www.sqlite.org/cvstrac/wiki?p=ManagementTools
- SQLite ControlCenter 日本語版
- http://www.takke.jp/soft/sqliteccj.html
- SQLite用ブラウザはTkSQLiteに決定 (bokut.in)
- http://bokut.in/mt/2007/03/sqlitetksqlite.html
■ 再頒布
ライセンス的に問題無いと判断しましたが,問題アリなら消します.ご連絡を.
一応公式サイトも確認して,最新版が出ているならそちらを使うことをお勧めします.
system_data_sqlite_1_0_43_0.zip:System.Data.SQlite ver.1.0.43.0(2007/06/21)
[2]コメントを書く
■コメント(11件)
■トラックバック(1件)
[9]ログイン
[*]検索