Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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 Mysql总是为受影响的行返回1_Java_Mysql_Sql_Jdbc_Jdbi - Fatal编程技术网

Java Mysql总是为受影响的行返回1

Java Mysql总是为受影响的行返回1,java,mysql,sql,jdbc,jdbi,Java,Mysql,Sql,Jdbc,Jdbi,我有一个使用JDBI/JDBC/Mysql的java应用程序 我正在尝试将一些更新语句作为事务运行,即设置autoCommit(false)。当我执行语句时,JDBI总是将受影响的行数返回为1,即使我希望它返回0 下面是代码片段 DBI dbi = currShardHandle.getDBI(); //Open the connection once for each shard Handle h = dbi.open(); handleList.add(h); //set AutoCom

我有一个使用JDBI/JDBC/Mysql的java应用程序

我正在尝试将一些更新语句作为事务运行,即设置autoCommit(false)。当我执行语句时,JDBI总是将受影响的行数返回为1,即使我希望它返回0

下面是代码片段

DBI dbi = currShardHandle.getDBI();

//Open the connection once for each shard
Handle h = dbi.open();

handleList.add(h);
//set AutoCommit to false to start transaction
h.getConnection().setAutoCommit(false);

List<TransactionQuery> list = shardQueryMap.get(shardId);
for(TransactionQuery query: list) {
    currQuery = query;
    Update u = h.createStatement(query.getQuery());
    log.info("commit(). Query {}",query.getQuery());

    //Bind parameters
    int pos = 0;
    for(Object obj: query.getParams()) {
        if(obj == null)
            u.bindNull(pos++, java.sql.Types.JAVA_OBJECT);
        else
            u.bind(pos++, obj.toString());
    }

    u.setQueryTimeout(dbTimeout);
    try {

        int count = u.execute();
        log.debug("Rows Modified {} , Rewritten SQL {} ", count, u.getContext().getRewrittenSql());
        rowsModified += count;
    } finally {
        //.....
    }
}

当我在mysql客户端中运行相同的查询时,它将受影响的行显示为0。

我发现mysql 5.1中报告了一个错误。这是bug的链接

我在JDBC Url中添加了useAffectedRows=true,它解决了这个问题

INSERT into abc (x,y,z ) values (1,2,3) on duplicate key update z=z;