- 顔爺
- ベテラン
- 会議室デビュー日: 2003/10/03
- 投稿数: 52
|
投稿日時: 2004-03-21 07:47
| 引用: |
|
かつのりさんの書き込み (2004-03-19 20:52) より:
>>顔爺さん
本来ならPreparedStatementを使うのがベストですが、
質問者の理解度も踏まえて、あえてエスケープとかしないで書きました。
ちなみに私の場合はPreparedStatementはあまり使いません。
バイナリを格納するときくらいですが、そういうケースは稀ですし。
SQL生成・実行前にバリデーションを必ず行うようにしています。
|
わたしはほとんど常に PreparedStatement を使いますね。
人(システム)がやってくれるのに自分でやるのは面倒くさいし(笑)、
ミスも犯さない。
他人に JDBC を聞かれた場合でも、「出来る限り PreparedStatement
を使え」といっております。
# 私のまわりでは、SQL Injection とか知らない開発者が以外と多い。
|
- ふーばー
- 大ベテラン
- 会議室デビュー日: 2003/06/05
- 投稿数: 163
|
投稿日時: 2004-03-22 08:10
| 引用: |
|
以下、余談。
実は PreparedStatement のバインド用メソッド(setXXX)の第一引数が ? の
インデックスなのは嫌いなのです。
理由は、可読性が低く、SQL 文の変更があったときに対応しづらいからです。
永井様が「Wrapper クラスを作る」とおっしゃってるのを読んでいるときに、
PreparedStatement のバインド位置を文字列で指定できる Wrapper (下記)
があるといいなと思いつきました。
<擬似コード>
// ? の直後にバインド用名称を入れる。
String query = "SELECT * FROM xxx WHERE ID=?ID AND PASSWORD=?PASS";
PreparedStatement wStmt = new PreparedStatementWrapper(stmt,query);
wStmt.setString("ID",id);
wStmt.setString("PASS",pass);
</擬似コード>
自作しても難しいものではありませんが、ありがちな考えなので誰かがすでに
作ってそうです。
どなたかこういうものを作った方おられましたらご意見をお聞かせください。
|
余談に反応。こういうクラス作りました。絶対便利です。パラメータの順序なんて
本来どうでもいいはずなんですよね。
ただ、java.sql.Connection と java.sql.PreparedStatement の定義にはクセがあり、
1.3 の PreparedStatement の実装は、1.4 でコンパイルできない、といった問題があります。(逆も不可)
|
- 顔爺
- ベテラン
- 会議室デビュー日: 2003/10/03
- 投稿数: 52
|
投稿日時: 2004-03-23 01:20
ふーばー様、お返事ありがとうございます。
| 引用: |
|
ふーばーさんの書き込み (2004-03-22 08:10) より:
余談に反応。こういうクラス作りました。絶対便利です。パラメータの順序なんて
本来どうでもいいはずなんですよね。
|
御意。
| 引用: |
|
ただ、java.sql.Connection と java.sql.PreparedStatement の定義にはクセがあり、
1.3 の PreparedStatement の実装は、1.4 でコンパイルできない、といった問題があります。(逆も不可)
|
なるほど、参考になります。
... となると実装方法を少し考えてみる必要がありそうです。
いっそのこと、www.java.sun.com の Bug Database に RFE としてだして
もいいかもしれません。
|