JDBC更新语句非null

时间:2011-08-29 22:17:58

标签: java jdbc

这是我面临的一个问题: - 我正在尝试使用多个值运行更新语句(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语句)?

谢谢,

1 个答案:

答案 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(..)