[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 メーリングリストの案内