2013-04-11 48 views
3

這裏是我最簡單的表(Postgres的):爲什麼executeUpdate返回1,即使沒有插入新行?

CREATE TABLE IF NOT EXISTS PERFORMANCE.TEST 
(
test text NOT NULL UNIQUE 
); 

如果我嘗試使用下面的命令從數據庫中插入一個字符串,一切正常,這並不奇怪一個新行出現在數據庫中。

insert into performance.test (test) values ('abbbbaw'); 

但是如果我想插入通過JDBC一個字符串,沒有獲取插入,雖然在PreparedStatement.executeUpdate()總是返回1.

下面是我的方法應該工作,但事實並非如此。請告訴我,如果我缺少明顯的東西。 我想補充一點,我從來沒有得到任何SQLException。

private void storePerformance() { 
    Connection conn= initializePerformanceConnection(); 
    if (conn!= null) { 
     PreparedStatement insertPS = null; 
     try { 
      insertPS = conn.prepareStatement("insert into performance.test (test) values (?)"); 
      insertPS.setString(1, queryVar); 
      int i = insertPS.executeUpdate(); 
      LogManager.doLog(LOG, LOGLEVEL.INFO," numberofrows= "+i); 

     } catch (SQLException e) { 
      LogManager.doLog(LOG, LOGLEVEL.INFO,"Inserting query failed = "+queryVar,e); 
     }finally{ 
      if(insertPS != null){ 
       try { 
        insertPS.close(); 
       } catch (SQLException e) { 
        LogManager.doLog(LOG, LOGLEVEL.INFO,"Closing PreparedStatement failed = "+queryVar,e); 
       } 
      } 
      try { 
       conn.close(); 
      } catch (SQLException e) { 
       LogManager.doLog(LOG, LOGLEVEL.INFO,"Closing performanceConnection failed= "+ queryVar, e); 
      } 
     }   
    } 
} 

回答

6

是失蹤:

conn.commit(); 

(使用executeUpdate()後)

實際上是一個新行插入,但DB立即回滾。

+0

默認情況下,自動提交設置爲true,所以我們爲什麼需要再次提交? – 2015-07-28 18:16:27

-1

executeupdate用於'更新表集合列=值等'。對於insert,只需調用PreparedStatement的execute。

+0

不,我已經嘗試過,並沒有任何區別 – 2013-04-11 10:11:03

相關問題