public class esc { private static final short CODE = 0; private static final short STRING = 1; private static final short BACKSLASH =2; private static final short ESC_DATE = 3; public static String EscapeSQL(String sql) { // look through the sql statement for escape codes. Since escape // codes can only appear in SQL CODE, we keep track of if we are // inside or outside a string. StringBuffer newsql = new StringBuffer(); short state = CODE; int i = -1; int len = sql.length(); while(++i < len) { char c = sql.charAt(i); switch(state) { case CODE: if(c == '\'') state = STRING; else if (c == '{') if(i+1 < len && sql.charAt(i+1) == 'd') { state = ESC_DATE; i++; break; // we skip the append. } newsql.append(c); break; case STRING: if(c == '\'') state = CODE; else if(c == '\\') state = BACKSLASH; newsql.append(c); break; case BACKSLASH: state = STRING; newsql.append(c); break; case ESC_DATE: if(c == '}') state = CODE; else newsql.append(c); break; } // end switch } return newsql.toString(); } public static void main(String args[]) { if(args.length != 1) { System.out.println("Usage java esc \"String\""); System.exit(1); } System.out.println(EscapeSQL(args[0])); } }