どもども。
今回は、昨日の更新とは全く関係ありませんが、
個人的にちょっとはまってしまった事案について、
記載していきたいと思います。
標準のJavaでDBアクセスをする際に、PreparedStatementというインタフェースを
Connectionというインターフェースから生成してSQL文を実行すると思うのですが、
※PreparedStatementのAPIはこちらです。
JavaのConnectionの生成からDBアクセスまでの流れが知りたい方は、
別途調べてください。
JavaでDBアクセスをする際には、よく使うPreparedStatementですが、
こちらで『ある失敗』をしたところ、(個人的に)わかりづらいエラーが出力され1時間程度
はまってしまいました。
で、その失敗は何かと言いますと、
// PreparedStatement生成
pStmt = conn.prepareStatement(sql);
・・・中略(パラメータ設定など)・・・
// executeUpdate実行
resultCount = pStmt.executeUpdate(sql);
という形で、生成時と、実行時に間違えてSQL文字列(INSERT文)を指定してしまいました。
かなり恥ずかしい失敗ですね。
で、こちらを実行すると、下記のエラーが表示されます。
『org.postgresql.util.PSQLException:
PreparedStatementでクエリー文字を含むクエリー方法は使えません。』
うん、意味わからんって感じでした。(わかる人にはわかるのでしょうか?)
ここからが問題だったのですが、こちらのメッセージをGoogle先生に聞いても
的を得た回答が得にくかったのです。(単純に私の検索力不足ですね・・・)
何よりくだらなすぎるミスのため、このエラーを出す人がいないのかもしれません。
ということで、この調べにくいエラーを出してしまって、
万が一このページを見た方にお伝えすることは、
『SQLの文字列をPreparedStatementに対して複数回指定していませんか?』ということですね。
どなたかの助けになれば幸いです。(後は自分用のメモを兼ねてです。)
ちなみに、このConnectionを生成してDBアクセスの流れですが、
フレームワーク等を使うとあまり意識しないことが多いです。
※私自身も以前ある仕事で、このDBアクセス方法を使うのか聞いたら、
『あーそんな方法もありましたね。』と言われてしまったことがあります。
古い書き方がわかりやすくて好きなんですけどね。
(フレームワークを覚えるのって大変なんですよ・・・)
ではでは。
0 件のコメント:
コメントを投稿