Оператор обновления JDBC не нулевой - PullRequest
3 голосов
/ 30 августа 2011

Вот проблема, с которой я сталкиваюсь: - Я пытаюсь выполнить оператор обновления (prepareStatement) с несколькими значениями, но только если они не равны NULL.

Пример:

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 может быть нулевым, и в этом случае я не хочу обновлять столбец 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 = ?";

Есть ли способ сделать это более аккуратно (всего одним оператором SQL), используя JDBC?

Спасибо

1 Ответ

2 голосов
/ 30 августа 2011

Создайте свое предложение 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 из Гуава .Вы можете использовать StringUtils.join(..) из Commons Lang .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...