我正在根据通过查询字符串传递的值准备 SQL 语句。 (我正在使用 Play! 框架。基本上,我遇到的问题(并不是真正的问题,只是我不太喜欢)是当我想在 SQL 字符串中使用 ?
时并稍后使用动态值设置它们。
这就是我所拥有的:
String sql = "SELECT * FROM foobar_table WHERE";
if ( foo != 0 )
sql += " AND foo=?";
if ( !bar )
sql += " AND bar=?";
try{
PreparedStatement getStmt = con.prepareStatement(sql);
if ( foo != 0 )
getStmt.setInt(1,foo);
if ( foo != 0 && !bar )
getStmt.setBoolean(2, bar);
else
getStmt.setBoolean(1, bar);
} catch (SQLException e ){
e.printStackTrace();
}
这确实有效,但正如您所看到的,不太直观。当有 2 个动态值时还可以,但当你达到 5 或 6 个时,这就变得很荒谬了。
是否有更简单的方法可以使其更加灵活,以便我知道如何以更好的方式填写所有 ?
?
最佳答案
示例(太长,无法评论):
String sql = "SELECT * FROM foobar_table WHERE 1 = 1 ";
ArrayList paramList = new ArrayList();
if ( foo != 0 ) {
sql += " AND foo=?";
paramList.add(foo);
}
if ( !bar ) {
sql += " AND bar=?";
paramList.add(bar);
}
try{
PreparedStatement getStmt = con.prepareStatement(sql);
int index = 1;
for (Object param : paramList) {
getStmt.setObject(index, param);
index++;
}
// execute
} catch (SQLException e ){
e.printStackTrace();
}
关于java - 在Java中准备动态Statement的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12133833/