9.6 KiB
9.6 KiB
title | author | date | wordtwit_post_info | categories | |||
---|---|---|---|---|---|---|---|
Gaucheでsqlite3を使用する | kazu634 | 2012-04-15 |
|
|
いつの間にか「kikuchi」で配布されていたsqlite3用のライブラリがダウンロードできなくなっていて、一瞬パニックになりましたが、githubで別な方が公開していらっしゃるみたいでした。「mhayashi1120/Gauche-dbd-sqlite3 ? GitHub」です。
インストール方法
とりあえず以下のようにしてインストールしました:
% git clone git://github.com/mhayashi1120/Gauche-dbd-sqlite3.git % cd Gauche-dbd-sqlite3/ % ./DIST gen % ./configure % make % make install
makeのところでなんかこけた記憶があるのですが、たしか「-l」オプションをひとつMakefileから削除した記憶が。。。
使い方
とりあえずこんな感じで使ってみました。ちなみにカレントディレクトリにquote.dbというsqlite3用のファイルがある前提です:
;; ============================== ;; Libraries: ;; ============================== (use dbi) (use gauche.collection) (define (execute-sql dbfile sql) (guard (e ((<dbi-parameter-error> e) (dbi-close connect)) ((<dbi-error> e) (exit 1)) (else (raise e))) (let* ((connect (dbi-connect (string-append "dbi:sqlite3:" dbfile))) (query (dbi-prepare connect sql)) (result (dbi-execute query))) (dbi-close connect) result))) (define *sql-result* (execute-sql "quote.db" "SELECT * from quote ORDER BY id DESC LIMIT 10;"))
execute-sqlは
- sqlite3用のファイル
- 実行するsql文
を引数にとり、実行した結果(リレーション)を返します。
1カラム目と2カラム目を標準出力に表示する
次のようにしてみました:
(for-each (lambda (row) (format (current-output-port) "id:~a\ndate:~a\n" (dbi-get-value row ) (dbi-get-value row 1))) *sql-result*)
実行結果はこのような感じです:
% gosh 2012-04-14-122932.scm id:10370 date:1334359203 id:10369 date:1334361235 id:10368 date:1334327565 id:10367 date:1334239319 id:10366 date:1334235069 id:10365 date:1334186403 id:10364 date:1334177624 id:10363 date:1334177843 id:10362 date:1334152357 id:10361 date:1334152804
DBのカラム名を取得し、標準出力に表示する
次のようにしてみました:
(for-each (lambda (column-name) (format (current-output-port) "~a\n" column-name)) (relation-column-names *sql-result*))
実行結果はこのような感じです:
% gosh 2012-04-14-122932.scm id date quote source md5
各カラムの値を取得し、標準出力に表示する
次のようにしてみました:
(let* ((column-names (relation-column-names *sql-result*)) (getter (relation-accessor *sql-result*))) (for-each (lambda (row) (map (lambda (column) (format (current-output-port) "~a:\n~a\n" column (getter row column))) column-names)) *sql-result*))
実行結果はこのような感じです:
% gosh 2012-04-14-122932.scm id: 10370 date: 1334359203 quote: 抑止力とは、「戦う意思を持たない暴力」ではなく、「戦わない意志を持った暴力」のことなのだと思う。小さな違いだけれど、意思を示さない限り、それは「力」たりえない。 (via @medtoolz) source: http://twitter.com/medtoolz/status/190930863851184129 md5: 6392e235cebdae0ac9c87ee958648fc0
さてと
もう少し遊んでみます。