este es un problema tortuosa vil, gracias plenamente que es bastante fácil de hacer frente a:
public class PreparedStatementBuilder
{
private String sql; // the sql to be executed
public PreparedStatementBuilder(final String sql) { this.sql = sql; }
protected void preparePrepared(final PreparedStatement preparedStatement)
throws SQLException
{
// this virtual method lets us declare how, when we do generate our
// PreparedStatement, we want it to be setup.
// note that at the time this method is overridden, the
// PreparedStatement has not yet been created.
}
public PreparedStatement build(final Connection conn)
throws SQLException
{
// fetch the PreparedStatement
final PreparedStatement returnable = conn.prepareStatement(sql);
// perform our setup directives
preparePrepared(returnable);
return returnable;
}
}
de usar, basta escribir una clase anónima que anula vacío preparePrepared (PreparedStatement):
final String sql = "SELECT * FROM FOO WHERE USER = ?";
PreparedStatementBuilder psBuilder = new PreparedStatementBuilder(sql){
@Override
protected void preparePrepared(PreparedStatement preparedStatement)
throws SQLException
{
preparedStatement.setString(1, "randal");
}};
return obtainResultSet(psBuilder);
Presto! Ahora tiene una forma de trabajar con un PreparedStatement sin haberlo creado todavía. He aquí un ejemplo que muestra el texto modelo mínimo que de otro modo tendría que copiar y pegar al otro mundo, cada vez que quería escribir una declaración diferente:
public ResultSet obtainResultSet(final PreparedStatementBuilder builder)
throws SQLException {
final Connection conn = this.connectionSource.getConnection();
try
{
// your "virtual" preparePrepared is called here, doing the work
// you've laid out for your PreparedStatement now that it's time
// to actually build it.
return builder.build(conn).executeQuery();
}
finally
{
try { conn.close(); }
catch (SQLException e) { log.error("f7u12!", e); }
}
}
Usted realmente no quiere ser copia pegar que en todas partes, ¿Vos si?
Esta biblioteca importa el paquete "com.healthmarketscience.common.util" que no está incluido ... – r3zn1k
Tienes que ir un poco: http://openhms.sourceforge.net/common-util/ – PeterMmm
Mejor solución. ¡Muchas gracias! – r3zn1k