为什么executeUpdate的返回1,即使没有新行已经插入?(why does executeU

2019-08-21 18:09发布

这里是我最简单的表(Postgres的):

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);
            }
        }           
    }
}

Answer 1:

这是丢失:

conn.commit();

(使用executeUpdate后())

实际上是一个新的行插入,但DB立即回滚。



Answer 2:

的executeUpdate为“更新表中设置列=值等等”。 对于插入只是通过调用PreparedStatement的执行。



文章来源: why does executeUpdate return 1 even if no new row has been inserted?