お世話になっております。 A.中村です。
北海道はこれから暴風圏だそうで。

On Fri, 24 Sep 1999 09:40:25 +0900
hisanori / sitc.toshiba.co.jp wrote:

>属性として持っておくというか、当該オブジェクトにクエリーが属しているというイメージなのはストアドプロシジャでしょうか。DelphiならTStoredProcで、こちらなら分からなくもないです。

その後少しJDBCオベンキョが進んで(笑)、前回俺が言ったのが
半分(以上)嘘なのに気づきましたm(__)m

Delphiであえて言えばTDataSetに相当する
Statementクラス(interface)ですが、
これの子にPreparedStatementってのがあって、
そちらのほうで、executeメソッドの
「sql引数を取らない」版を再定義してたんですね(^^;

PreparedStatementのほうはConnectionにsql引数つきで
自分を作ってもらうものらしく、つまり、

Statement statement = connection.createStatement()
statement.execute(sql) <=ここ

PreparedStatement pstatement = connection.prepareStatement(sql) <=ここ
pstatement.execute()

ってな感じらしいっす。

で、PreparedStatementってナンの為にあるかってーと、
1:予めsqlをサーバーに食わせて、プリコンパイル(?)を促す。
2:動的sql、つまり引数つきのsqlを書いておいて、後から
(pstatementを通して)引数への値をとっかえひっかえ出来るようにする。

んだそうです。
この意味においては、GUIコンポ指向とは関係なく、
「予めsqlを与える」意味があるように思えます。
#形態としてプロパティになっていないですが本質は同じ。

んで、PreparedStatementに追加されてるメソッドとして、
sql引数無し版のexecute系メソッドと、あと、
sqlに引数の値を与えるための、引数番号と値を指定する
「いろんなデータ型用の」メソッドが多数(T_T)あるようです。

ついでに、Preparedの更に子クラスにCallableStatementってのがあって、
引数から逆に値を取得するための「いろんなデータ型用の」
メソッドが、これまた多数(t_t)

>まぁ両方のやり方を用意しておくってのもいいかもしれませんが…。

というわけで、JDBCにも既に「両方のやり方」が
用意されてたようです(^^;ごめんよJDBC。

>どちらかと言うとSQL文はその場その場で実行するようなイメージがあります。

いずれにせよsqlって「実行する」ものだと思ってると
時にハマル模様っす。PreparedStatementが言うように、sqlを
サーバーにロードするのと実行させるのとは別概念らしいです。

ストアドプロシジャは、オブジェクトにsqlが属しているというより
オブジェクトにサーバー上の(pl/)sqlへの参照が属している
という印象を受けます。