Aquí está mi variación.
public class SimplePrepareStatement {
String vars[];
String query;
public SimplePrepareStatement(String query) {
int countVars = StringUtils.countMatches(query, "?");
vars = new String[countVars];
this.query = query.replaceAll("\\?", "%s");
}
public void setDouble(int i, Double arg0) {
vars[i-1] = "'"+arg0+"'";
}
public void setString(int i, String arg0) {
vars[i-1] = "'"+arg0+"'";
}
public void setObject(int i, String arg0) {
vars[i-1] = arg0;
}
public String getSQL() {
return String.format(query, vars);
}
}
Nota! Esto no es para uso de SQL, posibles inyecciones de SQL, solo un comportamiento similar.
@Test
public void simplePrepareStatementTest() {
SimplePrepareStatement st = new SimplePrepareStatement("abc ? abc ?");
st.setString(1, "a");
st.setString(2, "b");
assertEquals("abc 'a' abc 'b'", st.getSQL());
st.setObject(1, "obj");
assertEquals("abc obj abc 'b'", st.getSQL());
}
Crear una cadena de manera diferente no es lo mismo que utilizar declaraciones preparadas, donde los valores no son parte de la consulta enviada a la base de datos –