3

这是我非常简单的表(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);
            }
        }           
    }
}
4

2 回答 2

8

那是丢失的:

conn.commit();

(在执行更新()之后)

实际上插入了一个新行,但数据库立即回滚。

于 2013-04-11T10:40:08.933 回答
-1

executeupdate 用于“更新表集列 = 值等”。对于插入,只需调用 PreparedStatement 的执行。

于 2013-04-11T10:09:26.553 回答