Java JDBC动态查询,如果不是-1,则仅将值放入字符串
我对JDBC和java有一个问题。 我有这样一个问题:Java JDBC动态查询,如果不是-1,则仅将值放入字符串,java,mysql,jdbc,Java,Mysql,Jdbc,我对JDBC和java有一个问题。 我有这样一个问题: String updateSql=“更新联赛设置赛季=?,比赛进行情况=?,主场获胜百分比=?,平局百分比=?,平均进球数=?,平均进球数=?,平均进球数=?,平均进球数=?,平均进球数=?,百分比超过一场=?,百分比超过二场=?,百分比超过三场=?,得分总和=?”+whereClause+“和国家=”+l.getCountry()+“”; “季节”之后的所有值可以是大于等于0或-1的数字-1表示没有价值。这些值来自保存数据的类(如对象模
String updateSql=“更新联赛设置赛季=?,比赛进行情况=?,主场获胜百分比=?,平局百分比=?,平均进球数=?,平均进球数=?,平均进球数=?,平均进球数=?,平均进球数=?,百分比超过一场=?,百分比超过二场=?,百分比超过三场=?,得分总和=?”+whereClause+“和国家=”+l.getCountry()+“”;
“季节”之后的所有值可以是大于等于0或-1的数字-1表示没有价值。这些值来自保存数据的类(如对象模型)。
我只需要查询中>=0的值。另一个不应该出现在查询中,因为它们会替换数据库中的数据,而它们不应该这样做
有人能帮我存档吗?使用
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();
}
StringBuilder sql=newstringbuilder(“更新联赛设置赛季=?”;
List numValues=new ArrayList();
如果(l.getPlayedMatches()!=-1){
append(“,playedMatches=?”;
添加(l.getPlayedMatches());
}
如果(l.getPercentHomeWins()!=-1){
追加(“,percentHomeWins=?”;
添加(l.getPercentHomeWins());
}
// ... 更多代码。。。
sql.append(where子句)
.附加(“和国家=?”;
try(PreparedStatement stmt=conn.prepareStatement(sql.toString())){
int paramIdx=0;
stmt.setInt(++paramIdx,l.getSeason());
for(整数numValue:numValue)
stmt.setInt(++paramIdx,numValue);
stmt.setString(++paramIdx,l.getCountry());
stmt.executeUpdate();
}
如果你知道使用?
参数标记和PreparedStatement
,你到底为什么要使用字符串连接来构建WHERE
子句呢?仅供参考:UPDATE
语句不是查询。只有SELECT
语句才是查询。我知道如何执行此操作,但我认为应该有一种更简单的方法,如何执行此操作并从更新中排除值。这是一种非常有用的方法。非常感谢你!