java sql escape

在java中拼出sql语句时时常要注意escape问题,以防止sql注入攻击。
下面是简单的一个小工具,containsEscapeKeyword方法检测是否有需要转义的字符,忘了是不是仅仅是这两个,如果有增加case就可以。
escapeSQL方法提供一个转义后的sql语句。
只是一个简单的小代码,以后待完善。

public class EscapeSQL {
        public final String ESCAPE=" ESCAPE '\\' ";
	public static boolean containsEscapeKeyword(String s){
		int length = s.length();
	    for (int i=0; i<length; i++){
	      char c = s.charAt(i);
	      switch(c){
	        case '%':
	        case '_':
	        return true;
	      }
	    }
	    return false;
	}
	public static String escapeSQL(String s){
	    int length = s.length();
	    int newLength = length;
	    for (int i=0; i<length; i++){
	      char c = s.charAt(i);
	      switch(c){
	        case '\\':
	        case '\"':
	        case '\'':
	        case '%':
	        case '_':
	        case '\0':{
	          newLength += 1;
	        } break;
	      }
	    }
	    if (length == newLength){
	      return s;
	    }
	    StringBuffer sb = new StringBuffer(newLength);
	    for (int i=0; i<length; i++){
	      char c = s.charAt(i);
	      switch(c){
	        case '\\':{
	          sb.append("\\\\");
	        } break;
	        case '\"':{
	          sb.append("\\\"");
	        } break;
	        case '\'':{
	          sb.append("''");
	        } break;
	        case '_':{
		          sb.append("\\_");
		        } break;
	        case '%':{
		          sb.append("\\%");
		        } break;
	        case '\0':{
	          sb.append("\\0");
	        } break;
	        default: {
	          sb.append(c);
	        }
	      }
	    }
	    return sb.toString();
	  }
}

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>