PreparedStatement

javaでデータベースに接続し結果を取得する場合に、一般的な入門書などにはStatementを使っているが、PreparedStatementを使ったほうが実は良かったりする。例えば速度面など。
PreparedStatementの使い方は簡単で、

select * from test_table where id = ? and name = ?

のようにSQL文を書いておき、これの?の値にPreparedStatementのset〜メソッドを使って当てはめていって、最後にSQL文を実行するメソッドを呼べばよい。
?を使えばなんでもセットできるなんて便利だなぁと思った私は、

select coutn(?) from test_table

いろんな値の数が欲しかったので、上記のようなSQL文をPreparedStatementで実装していた。
しかしいざテストを行ってみると、これが上手く行かない。
なので調べて見ると、PreparedStatementのset〜メソッドは非常に賢くて、?に当てはめる値を自動的にシングルクォーテーションマークで囲ってくれるのだ。
つまり上のSQL文でIDの値をカウントしたい場合

select count('ID') from test_table

となってしまうので、上手くカウントされないのだ。
またPreparedStatementではStatementを使う場合と違い、実行されるSQL文を調べることができなかったことも痛かった。これが原因で上記のような問題をなかなか見つけることができず苦戦した。