Haskell で sqlite3 のデータベースにアクセスしてクエリを実行してみるまで。
 
GHC のインストールは以前ここに書いた。

http://basicwerk.com/blog/archives/1131

 
その他必要な物がいろいろある。
 
The text package

http://hackage.haskell.org/package/text

 
The convertible package

http://hackage.haskell.org/package/convertible

 
The utf8-string package

http://hackage.haskell.org/package/utf8-string

 
上記をインストールした上で、
 
The HDBC package

http://hackage.haskell.org/package/HDBC

 
Sqlite v3 driver for HDBC

http://github.com/hdbc/hdbc-sqlite3

 
全てパッケージのインストール方法は共通で、
 

  1. それぞれの Web ページから zip か tar.gz ファイルをダウンロードしてローカルの適当な場所に展開する
    % tar -zxvf filename.tar.gz
    GitHub の場合は、「HTTPS clone URL」と書いてある URL をコピって
    % git clone https://github.com/hdbc/hdbc-sqlite3.git
  2. 展開後のディレクトリに cd
  3. % ghc --make -o setup Setup.lhs (または Setup.hs) でコンパイル
  4. % ./setup configure でインストール可能か確認。必要なパッケージ等がないとこの時点で怒られる
  5. % ./setup build
  6. % sudo ./setup install

 
致命的なエラーがなければこれでパッケージのインストールは完了。
 
 
では本題のデータベース接続。
こちらのサイトを参考にさせてもらった。

HaskellでSQLiteにアクセスする

http://blog.kzfmix.com/entry/1354615887

 
まず DB を作る。
 

 
% sqlite3 sample.db "create table sample (id, val);"
% sqlite3 sample.db "insert into sample values (1, 'aaa'), (2, 'bbb'), (3, 'ccc');"
% sqlite3 sample.db "select * from sample;"
1|aaa
2|bbb
3|ccc
 

 
Haskell ファイルの中身はこんな感じ(DB と同じディレクトリに作成してコンパイル)。
sql_test.hs

 
import Database.HDBC
import Database.HDBC.Sqlite3
import Data.Maybe
 
main = do
  conn <- connectSqlite3 "sample.db"
  stmt <- prepare conn "select * from sample;"
  execute stmt []
  results <- sFetchAllRows stmt
  mapM_ print results
 

 
コンパイルする。
 

 
% ghc --make sql_test.hs
[1 of 1] Compiling Main             ( sql_test.hs, sql_test.o )
Linking sql_test ...
 

 
コンパイルが終わると sql_test という名前の実行ファイルができる。
 

 
% sql_test
[Just "1",Just "aaa"]
[Just "2",Just "bbb"]
[Just "3",Just "ccc"]
 

 
 

 
 

§1672 · Posted By · 8月 9, 2014 · Development · Tags: , · [Print]