# Statement

  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が返る。