Динамический запрос JDBC, только помещает значение в строку, если не -1 - PullRequest
0 голосов
/ 31 августа 2018

У меня проблема с JDBC и Java. У меня есть такой запрос:

String updateSql = "UPDATE league SET season=?, playedMatches=?, percentHomeWins=?, percentDraws=?, percentAwayWins=?, averageGoalsPerGame=?, averageGoalsHomePerGame=?, averageGoalsAwayPerGame=?, percentOverOne=?, percentOverTwo=?, percentOverThree=?, percentBothTeamsScored=?, scoredGoalsTotal=?  " + whereClause + " and country='" + l.getCountry() + "'";

все значения после «сезона» могут быть числом> = 0 или -1. -1 означает, что нет значения. значения поступают из класса, который содержит данные (например, объектную модель). Я хочу только значения в моем запросе, которые> = 0. Другое не должно быть в запросе, потому что они заменяют данные в базе данных, которые они не должны.

Может ли кто-нибудь помочь мне архивировать это?

1 Ответ

0 голосов
/ 31 августа 2018

Используйте StringBuilder для динамического построения оператора SQL, например,

StringBuilder sql = new StringBuilder("UPDATE league SET season=?");
List<Integer> numValues = new ArrayList<>();
if (l.getPlayedMatches() != -1) {
    sql.append(", playedMatches=?");
    numValues.add(l.getPlayedMatches());
}
if (l.getPercentHomeWins() != -1) {
    sql.append(", percentHomeWins=?");
    numValues.add(l.getPercentHomeWins());
}
// ... more code ...
sql.append(whereClause)
   .append(" and country=?");
try (PreparedStatement stmt = conn.prepareStatement(sql.toString())) {
    int paramIdx = 0;
    stmt.setInt(++paramIdx, l.getSeason());
    for (Integer numValue : numValues)
        stmt.setInt(++paramIdx, numValue);
    stmt.setString(++paramIdx, l.getCountry());
    stmt.executeUpdate();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...