「SQLiteをWindows Mobileで動かそう!!しかも.NETで!!!」
我々は死んではいません!(←ってどっかの瀕死なOSSプロジェクトページに書いてあったw
さてさて久しぶりの更新になっちゃいましたが。
今回は「SQLiteをWindowsMobileで動かそう!!しかも.NETで!!!」企画w(はい、みんな元気よく!!!
とりあえず日本でググってもSQLiteをCEで動かそうという使用シーンを想像しがたい技にわざわざ挑む、クレイジーはほぼ皆無。
少なくとも組み込み用に書いてる人がいなかったので、海外のフォーラムを読み読みしつつ弄ってみた。
使用したのはADO.NET Data Provider for SQLiteという、SQLiteのARM用ビルド向けの.NETラッパー
ここで、ARM用のパッケージ(このときの最新版はSQLite.NET.0.21_armv4_dll.zip)をダウンロードしてー
展開。(あんじっぷー!)
Visual Basicでスマートデバイスプロジェクトを作ってー
参照の追加から「SQLite.NET.dll」を指定。
そいでテキトーにソースを書く。
(主要なとこだけ抜粋してみる。Finisar.SQLiteと同じだから、本家を参照)
Dim conn As New SQLiteConnection("Version=3;Data Source=test.db;New=True;Compress=True;") Dim cmd As SQLite.SQLiteCommand cmd = conn.CreateCommand conn.Open() cmd.CommandText = "CREATE table list (test_num INT, test_text TEXT)" cmd.ExecuteNonQuery() cmd.CommandText = "INSERT INTO list values(1,'おっぱいおっぱい')" cmd.ExecuteNonQuery() conn.close()
先ほど展開した残りのDLLファイル郡(SQLite3.dllとか)をパスが通るところに置いとく。
今回は実行ファイルと同じフォルダに配置
(初めての実行だと、フォルダが生成されてないかもなので、なければこのあとの実行を先に一度やっとく方がいいかもね。)
そいで、ビルド&デバイスへの配置、実行。
はい、できました。
とりあえずこんな感じでW-ZERO3内のファイルリストを作ってみた。
これでファイル検索がSQLでできるぞーw
Private Function Execute(ByVal directory_path As String) As Boolean Try Dim extension As String Dim created As Date Dim modified As Date Dim filesize As Integer For Each filepath As String In IO.Directory.GetFiles(directory_path) extension = System.IO.Path.GetExtension(filepath) created = System.IO.File.GetCreationTime(filepath) modified = System.IO.File.GetLastWriteTime(filepath) Dim fi As New FileInfo(filepath) filesize = fi.Length addlist(filepath, filesize, extension, created, modified) Next For Each directory As String In IO.Directory.GetDirectories(directory_path) Me.Execute(directory) Next Execute = True Catch ex As Exception Execute = False End Try End Function Private Sub addlist(ByVal filepath As String, ByVal filesize As Integer, ByVal extension As String, ByVal created As Date, ByVal modified As Date) Try Dim path As String = filepath.Replace("\", "\\") cmd.CommandText = "INSERT INTO list values('" + path + "'," + filesize.ToString + ",'" + extension.ToString + "','" + created.ToString + "','" + modified.ToString + "')" cmd.ExecuteNonQuery() Catch ex As SQLiteException MessageBox.Show("データベース追加エラー") End Try End Sub
いつも思うけど再帰って気持ちいいよねw
さてさて、なにに使うよーww
実用的には図書館の蔵書検索システムなんかにWindowsCEデバイスを使うのがいいかもね。
だって、PDAを持って、蔵書を探せるんだよ?
それが無理だとしても、つけっぱなしのWindowsPC端末よりかはWindowsCE端末の方が消費電力が小さくていい!!
追記
2008/02/26現在、「Windows Mobile SQLite」でググって(co.jp)みたところ、WEB全体でもトップに来ます。
よほど少ないんですね。
これを機になにか作ってみたいところです。