LoginSignup
2
1

More than 3 years have passed since last update.

prepareStatementのSQL文以外の引数について

Posted at

実はprepareStatementでSQL以外のものを渡すことができる

prepareStatement(String sql)以外の指定があります。
ということに最近弊プロダクトのコードを見ていて気づいたので、色々みた結果をまとめます。

Javaのバージョン

Javaのバージョン1.8.0_20で確認しています。

prepareStatementに渡せる最大引数について

最大は以下の引数指定かと思います。

PreparedStatement prepareStatement(String sql, int resultSetType,
                                       int resultSetConcurrency, int resultSetHoldability)

渡すSQL以外に指定する値について、見ていきます。

ResultSetTypeについて

resultSetTypeは指定可能なものが3つあります。

     * @param resultSetType one of the following <code>ResultSet</code>
     *        constants:
     *         <code>ResultSet.TYPE_FORWARD_ONLY</code>,
     *         <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
     *         <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>

TYPE_FORWARD_ONLY:カーソルを前方にのみ移動が可能
TYPE_SCROLL_INSENSITIVE:スクロール可能ですが、変更は反映されません
TYPE_SCROLL_SENSITIVE:スクロール可能、且つ、他による変更も反映されます

resultSetConcurrencyについて

resultSetConcurrencyは指定可能なものが2つあります。

     * @param resultSetConcurrency one of the following <code>ResultSet</code>
     *        constants:
     *         <code>ResultSet.CONCUR_READ_ONLY</code> or
     *         <code>ResultSet.CONCUR_UPDATABLE</code>

CONCUR_READ_ONLY:ResultSetはデータの読み出しのみ
CONCUR_UPDATABLE:ResultSetは変更可能で、カーソルを動かして挿入や変更、削除ができる
※ResultSetの更新機能を利用してデータを更新することができます(参考リンク)

resultSetHoldabilityについて

resultSetHoldabilityは指定可能なものが2つあります。

     * @param resultSetHoldability one of the following <code>ResultSet</code>
     *        constants:
     *         <code>ResultSet.HOLD_CURSORS_OVER_COMMIT</code> or
     *         <code>ResultSet.CLOSE_CURSORS_AT_COMMIT</code>

HOLD_CURSORS_OVER_COMMIT:トランザクションがコミットされたタイミングでResultSetはオープンしたままになります
CLOSE_CURSORS_AT_COMMIT:トランザクションがコミットされたタイミングでオープンしているResultSetオブジェクトはクローズします

まとめ

つまり
・ResultSetType:カーソルを前後に動かせるか、カーソルを動かしたときにResultSetの変更を参照するか
・resultSetConcurrency:ResultSetが変更可能であるか
・resultSetHoldability:ResultSetのクローズのタイミング
ということですね。

参照:
https://docs.oracle.com/javase/jp/8/docs/api/java/sql/Statement.html
https://docs.oracle.com/javase/jp/8/docs/api/java/sql/ResultSet.html

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1