为什么即使没有插入新行,executeUpdate 也会返回

why does executeUpdate return 1 even if no new row has been inserted?(为什么即使没有插入新行,executeUpdate 也会返回 1?)

本文介绍了为什么即使没有插入新行,executeUpdate 也会返回 1?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

here is my very simple table (Postgres):

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

如果我尝试使用以下命令从数据库中插入字符串,一切都会按预期进行,毫不奇怪,数据库中会出现一个新行.

if I try to insert a String using the command below FROM the database,everything works as expected, not surprisingly a new row appears in the DB.

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

但是,如果我想通过 JDBC 插入字符串,则不会插入任何内容,尽管preparedStatement.executeUpdate() 总是返回 1.

However if I want to insert a String through JDBC, nothing gets inserted, although preparedStatement.executeUpdate() always returns 1.

以下是我的方法,它应该有效,但它没有.如果我遗漏了一些明显的东西,请告诉我.我想补充一点,我从来没有收到任何 SQLException.

Below is my method that should be working but it does not. Please tell me if I am missing something obvious. I want to add that I never get any 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);
            }
        }           
    }
}

推荐答案

不见了:

conn.commit();

(在 executeUpdate() 之后)

(after the executeUpdate())

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

actually a new row was inserted but the DB rolled back immediately.

这篇关于为什么即使没有插入新行,executeUpdate 也会返回 1?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:为什么即使没有插入新行,executeUpdate 也会返回

基础教程推荐