お世話になっております。 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への参照が属している という印象を受けます。