えんどう
yasuy****@javao*****
2004年 2月 17日 (火) 23:08:15 JST
えんどうです。 まだ最低限の実装ですが、DBI/DBDを書いたので投稿します。 http://www.kahua.org/cgi-bin/kahua.cgi/kahua-web/show/dev/DBI 上記から dbi-0.1.tgz がダウンロードできます。 * 利用可能なRDBMS 現状で利用できる RDMS は以下です。 - MySQL - PostgreSQL MySQLを利用するためには mysql.h と libmysqlclient ライブラリーが必要です。 たとえば Debian GNU/Linux では apt-get install mysql-client mysql-dev を実行してください。 PostgreSQLを利用するためには Gauche の pg 拡張ライブラリーが必要です。 http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Gauche%3aPackages#H-19q7sdo Gauche の pg 拡張ライブラリーをビルドするには libpq-fe.h と libpq ライブラリーが必要です。 たとえば Debian GNU/Linux では apt-get install postgresql-client postgresql-dev を実行してください。 * インストール $ tar xvfz dbi-0.1.tgz $ cd dbi-0.1 $ ./configure $ make makeにはMySQLのmysql.hヘッダーおよびlibmysqlclientライブラリーが必要です。 $ make test make testで共通モジュールのテストが行われます。 PostgreSQL、MySQLのテストを行いたい場合は以下をそれぞれ実行してください。 $ make checkpg $ make checkmysql $ sudo make install * 使い方 まず dbi モジュールを use します。 (use dbi) つぎに、各ドライバーに対応した <dbi-driver> をmakeします。 (define driver (dbi-make-driver "mysql")) makeした <dbi-driver> を使ってデータベースに接続し、 <dbi-connection> を取得します。 (define connection (dbi-make-connection driver "user" "password" "option")) <dbi-connection> に対応した <dbi-query> をmakeします。 (define query (dbi-make-query connection)) SQL文を実行し、<dbi-result-set> を得ます。 (define result-set (dmi-execute-query query "select * from test")) <dbi-result-set> は <collection> を実装し、call-with-iterator が使えます。 カラムの取り出しは dbi-get-value カラム 番号 を使います。 (define rows (map (lambda (row) (list (dbi-get-value row 0) (dbi-get-value row 1))) result-set)) たとえば test テーブルに以下のようなデータが入っていた場合、 +------+---------- | id | name | +------+----------+ | 10 | yasuyuki | | 20 | nobsun | +------+----------+ 上記の rows には以下が格納されます。 (("10" "yasuyuki") ("20" "nobsun")) * ToDo - SchemeQLの移植 - configureでPostgreSQLやMySQLのインストールを判断して、 インストール済みのものだけテストする - dbi層でのトランザクションAPI抽象化仕様 - dbi層でのカーソル抽象化仕様 - Firebird, Oracle等でprepared statementをネイティブ側へ委譲 - 各種エラー処理 -- ENDO Yasuyuki <yasuy****@javao*****> http://www.javaopen.org/~yasuyuki/ (Personal/Japanese Only) http://www.javaopen.org/jfriends/ (Japanese Only)