Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBC动态查询,如果不是-1,则仅将值放入字符串_Java_Mysql_Jdbc - Fatal编程技术网

Java JDBC动态查询,如果不是-1,则仅将值放入字符串

Java JDBC动态查询,如果不是-1,则仅将值放入字符串,java,mysql,jdbc,Java,Mysql,Jdbc,我对JDBC和java有一个问题。 我有这样一个问题: String updateSql=“更新联赛设置赛季=?,比赛进行情况=?,主场获胜百分比=?,平局百分比=?,平均进球数=?,平均进球数=?,平均进球数=?,平均进球数=?,平均进球数=?,百分比超过一场=?,百分比超过二场=?,百分比超过三场=?,得分总和=?”+whereClause+“和国家=”+l.getCountry()+“”; “季节”之后的所有值可以是大于等于0或-1的数字-1表示没有价值。这些值来自保存数据的类(如对象模

我对JDBC和java有一个问题。 我有这样一个问题:

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
语句才是查询。我知道如何执行此操作,但我认为应该有一种更简单的方法,如何执行此操作并从更新中排除值。这是一种非常有用的方法。非常感谢你!