SQL文を「保持する」ものであり、かつ「実行する」もの。 JDBCはStatementは3種類のクラスつまり Statement, PreparedStatement, CallableStatement を 持っているが、RDBCでは1種類のみで、実行時に 動作を変化させている。
initialize(con, sql=nil)
Connection#createStatementから呼ばれる(のでRDBCユーザーが呼ぶ必要はない)。 conは由来するConnectionオブジェクト。 sqlがnilならばselfは「後でSQL文を与えられる(preparedでない)」存在となる。 nilでなければ「今与えられたSQL文を後で実行する(preparedである)」存在となる。
execute(sql=nil)
SQL文を「実行」する。sqlがnilなら「最初(initialize)に与えられた
SQL文」を実行する。nilでなければ「今与えられた sql」を実行する。
initializeとexecuteの「どちらか一方で1回だけ」SQL文は
与えられるべきである。両方ナシまたは両方アリであった場合、
例外を出す。
SQL文を実行した結果として、今回の検索の結果であるResultSetオブジェクトが
生成されているか、今回の更新の結果であるupdatecountが0以上になっているか、
どちらかが生じているはずである。ResultSetが生成されていればtrueを、
updatecountが0以上ならばfalseを、返す。
executeQuery(sql=nil)
executeに似ている。SQL文を実行した後で ResultSetが存在することを仮定している点が違う。 つまり、実行されたSQL文が「検索」を行うものであった と仮定している。そうでなかった場合は例外になる。 成功すればそのResultSetを返す。
executeUpdate(sql=nil)
executeに似ている。SQL文を実行した後で ResultSetが存在しないことを仮定している点が違う。 つまりexecuteQueryの対である。 updatecountが0以上になっていなければ例外になる。 成功すればupdatecountを返す。
close
このStatementと、それに由来するRDBCオブジェクトを、閉じる。
setParam(index, data)
selfがpreparedな存在であるとき、「パラメータつきSQL文」に パラメータを後から与え、実行することが出来る。 そのパラメータを与えるメソッドがこれである。 文字列indexはパラメータの「名前」、dataはパラメータのデータである。
getParam(index)
「パラメータつきSQL文」によって値を取り出すためのメソッド。
resultset
executeまたはexecuteQueryを行った結果のResultSetを (次回SQL文を実行するまでは)記憶しているので、それを返す。 前回SQL文がexecuetUpdate系であった場合は、nilが返る。
updatecount
executeまたはexecuteUpdateを行った結果のupdatecountを (次回SQL文を実行するまでは)記憶しているので、それを返す。 前回SQL文がexecuetQuery系であった場合は、-1が返る。