データベースへ接続して書き込みなどを行う際、SQL 命令文 「’」「”」などはエスケープ処理をする必要があります。
例えば下記のようなエスケープメソッドを定義して利用することができます。
public static String escape(String s) {
StringBuilder str = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
switch (s.charAt(i)) {
case '\'' :
str.append("\\\'");
break;
case '"' :
str.append("\\\"");
break;
case '\\' :
str.append("\\\\");
break;
default :
str.append(s.charAt(i));
break;
}
}
return str.toString();
}
______
しかし、PreparedStatement の setString メソッドを使うとセットする文字列を自動でエスケープしてくれるのでエスケープメソッドは必要なくなります。
PreparedStatement には setString だけでなく setInt, setLong などのメソッドもあります。
PreparedStatement pst = con.prepareStatement("select*from mytable where title=?");
pst.setString(1, req.getParameter("title"));
などのように利用するだけで req.getParameter("title") に SQL 命令文に影響を与える文字があってもエスケープしてくれます。
また、ステートメントを用意した後は setString メソッドなどを使ってパラメータを変えるだけで次のSQL 文を作成できるので高速に動作します。
0 件のコメント:
コメントを投稿