当前位置: 首页 > 面试题库 >

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

陈康胜
2023-03-14
问题内容

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

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

如果我尝试使用FROM数据库下面的命令插入String,那么一切都会按预期工作,不足为奇的是,数据库中会出现一个新行。

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

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

问题答案:

丢失了:

conn.commit();

(在executeUpdate()之后)

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



 类似资料:
  • 问题内容: 我编写了一个小测试程序以弄清楚如何与人交谈。我创建了三个文件,,和写入字符串到第一。因此,这是我的调用: 根据联机帮助页,超时应指示syscall永不超时。但是,它不断返回而没有任何内容可供读取。我总是消耗输入的一个字节,并且可以看到正在打印的内容,但是民意调查并没有就此停止。它只是假装有一些东西要读。 我得到的是: (永远重复最后两行) 我在3.10-2-amd64内核上构建。 问题

  • 问题内容: 在装有NVidia GeForce 820M的Windows 10 PC上,我成功安装了CUDA 9.2和cudnn 7.1,然后按照pytorch.org上的说明安装了PyTorch。 具体来说我使用了命令 因为我使用点子而不是Anaconda。 然而我得到以下 为什么会这样呢? 问题答案: 您的图形卡不支持CUDA 9.0。 由于我已经看到很多涉及此类问题的问题,因此我就如何检查您

  • 我目前正在尝试返回我刚刚添加到集合中的文档,以便在我的主页上实时显示它。 我遵循了我在这里找到的解决方案:链接到2018年解决方案。但是这个解决方案似乎不适用于最新的node.js和MongoDb版本。 我基本上是在尝试做与那篇文章中的人尝试做的相同的事情,但我得到了以下错误: 这是我的代码供参考:

  • 我有以下PHP代码。我希望返回插入的最后一个id: 我的DB架构如下: 我已经把厨房的水槽扔过去了,但一点也没有。无论我做什么,总是未定义的。我已经验证了实际上有一个插入。我只剩下运行另一个select并返回最大VesselTransitID的(可怕的)选项,这并不能保证正确的结果。

  • 我正在创建一个进行线性探测以查找键索引的哈希图。如果键已经在索引中,我想增加它的值,而不是向新索引添加一个。 例如,如果我得到字符串“五,五,五”的字数,我的输出是五1,五1,五1,而不是五3。 我认为一定是我的 containsKey 方法,它使用 get 方法来检查我的密钥是否已在映射中。下面是我的Hashmap.java类。

  • 问题内容: 我正在尝试用写入文件后删除文件。这是我用来编写的代码: 我刷新并关闭了流,但是当我尝试删除时,返回。 我删除前检查,看看是否该文件存在,并且:,,一切回归真实。在调用这些方法之后,我尝试返回。 我做错了什么吗? 问题答案: 起作用的把戏很奇怪。事情是,当我以前读取文件的内容时,我使用。阅读后,我关闭了缓冲区。 同时,我切换了语言,现在我正在使用读取内容。同样在完成阅读后,我关闭了流。现