这是我面临的一个问题: - 我正在尝试使用多个值运行更新语句(preparedStatement),但前提是它们不为空。
示例:
String x, y,z; //initialized to some value
final String EXAMPLE_SQL = "Update Table1 set col1 = ?, col2 = ? where col3 = ?";
sqlStmt = conn.prepareStatement(EXAMPLE_SQL);
sqlStmt.SetString(1, x);
sqlStmt.SetString(2, y);
sqlStmt.SetString(3, z);
sqlStmt.executeUpdate();
但有时x可以为null,在这种情况下我不想用空值更新col1列。
一种方法可能是: -
if(x == null)
final String EXAMPLE_SQL = "Update Table1 set col2 = ? where col3 = ?";
else
final String EXAMPLE_SQL = "Update Table1 set col1 = ?, col2 = ? where col3 = ?";
有没有办法可以使用JDBC更干净地(只有一个SQL语句)?
谢谢,
答案 0 :(得分:2)
构建您的SET子句:
StringBuilder query = new StringBuilder("Update Table 1 ");
List<String> columnsToSet = new ArrayList<String>();
if (x != null) {
columnsToSet.add("col1 = ?");
}
if (y != null) {
columnsToSet.add("col2 = ?");
}
String setClause = Joiner.on(", ").join(columnsToSet);
query.append(setClause);
setString(..)
Joiner
来自Guava。您可以使用Commons Lang中的StringUtils.join(..)
。