2014-05-05 46 views
0

我有一個使用JDBI/JDBC/Mysql的java應用程序。Mysql對於受影響的行總是返回1

我試圖運行一些更新語句作爲事務,即設置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 { 
     //..... 
    } 
} 

SQL插入的類型的

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

當我運行mysql客戶端相同的查詢,它顯示我的影響爲0

回答