即使没有插入新行,为什么executeUpdate返回1?

时间:2013-04-11 09:54:04

标签: java postgresql jdbc insert prepared-statement

这是我非常简单的表格(Postgres):

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

如果我尝试使用以下命令从数据库中插入一个String,那么一切都按预期工作,毫不奇怪,数据库中会出现一个新行。

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

但是,如果我想通过JDBC插入一个String,则不会插入任何内容,尽管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);
            }
        }           
    }
}

2 个答案:

答案 0 :(得分:6)

缺少:

conn.commit();

(在executeUpdate()之后)

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

答案 1 :(得分:-1)

executeupdate用于'更新表集列=等等'。对于insert,只需调用PreparedStatement执行。