[SML 7134] Re: Smalltalk システムでのデータの保存、データベースについての質問
鈴木 藍
tar_zcvf @ yahoo.co.jp
2006年 2月 23日 (木) 01:05:44 JST
鈴木 藍と申します。誰も答えないので、おそれながらお答えします。
以前、ちょっといじったので。
> はじめまして。このMLに参加させていただきました。
> さえぐさともうします。
はじめまして。
> ネットワーク上のデータ(データベース)を扱うには
> どのようにするのでしょうか。
ネットワーク上のデータ(データベース)が、一般的によく使われている
リレーショナルデータベースとしてお答えします。
私は VisualWorks 7.3(秘密)を使用していますが、はじめから
PostgreSQLEXDI というパーセル(PostgreSQL のドライバ)がインストールされているので
これを使用して PostgreSQL サーバに接続できます。パッケージ PostgreSQLDriver の
クラス PostgreSQLTest のクラスメソッドのカテゴリ "testing" に、テストコードが
たくさん用意されているので、接続パラメタの設定を自分が使用するデータベース用に変更すると、
接続テストを行うことができます。接続パラメタの設定の変更は、クラス PostgreSQLTest の
クラスメソッドのカテゴリ "testing - defaults" で行うことができます。
たとえば選択の問い合わせを一連のコードであらわすと、以下のような感じになります。
(オブジェクトデータベースではないので、やはり表示部分が面倒)
---------------------------------
| parameterSet connection queryMessage aResultList resultData |
" 接続パラメタの設定 "
parameterSet := ConnectionParameterSet new.
parameterSet
host: 'localhost';
port: 5432;
databaseName: 'nethack';
userName: 'spiral';
password: 'Elbereth'.
" 問い合わせ開始 "
connection := PostgreSQLConnection using: parameterSet.
queryMessage := connection newQuery.
queryMessage queryString: 'SELECT name, alignment, effect FROM artifact;'.
aResultList := queryMessage execute.
connection close.
" 表示 "
resultData := WriteStream on: String new.
aResultList do:
[:aResult |
" カラム名表示 "
aResult rowDescription isNil
ifFalse:
[aResult rowDescription fieldDescriptions do:
[:aFieldDescription |
resultData
nextPutAll: aFieldDescription name;
tab;
nextPutAll: '|';
tab].
resultData
cr;
nextPutAll: '-------------------------------------------------------------------';
cr.
" データ表示 "
aResult rows do:
[:aRow |
aRow fields do:
[:aField |
aField isNil
ifTrue:
[resultData
tab;
tab]
ifFalse:
[resultData
nextPutAll: aField asString;
tab;
tab]].
resultData cr]]].
Transcript
cr;
show: resultData contents
---------------------------------
実行結果は以下の感じ。
---------------------------------
name | alignment | effect |
-------------------------------------------------------------------
Excalibur lawful automatic searching, level-drain resistance
Magicbane neutral magic resistance
Stormbringer chaotic level-drain resistance
Frost Brand maverick cold resistance
---------------------------------
他にも、リレーショナルデータベースでしたら DB2 や Oracle が、オブジェクトデータベースでしたら
OmniBase (梅澤さんが日本語化されたらしいです)のドライバがあるみたいです。
これらは、パーセルブラウザの Suggestions の "DataBase" にリストされています。
Oracle も試してみようと思ったのですが、テストコードが見つからなかったのでまた今度。
実際にアプリケーションで使用する場合には、コネクションプーリング機構
(Oracle でいう暗黙的キャッシュ)が必要になることが多いと思いますが、
それっぽいモノは見当たらないので自分で作る必要がありそうですね。
> あるいは、ベテランの方は、どのようなものをつかったり、
> コーディングなど、されていますか?
エセユーザなのでごめんなさい。
//鈴木 藍
-- tar_zcvf @ yahoo.co.jp
SML メーリングリストの案内