org.h2.jdbc.JdbcSQLException:对象已关闭

2023-12-29

对于我的一生,我看不出它是如何“已经关闭”的

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;


public class RsetTest2 {

    public static void main(String[] args) throws Exception {
        String dbpath = "jdbc:h2:c:/mydb;IFEXISTS=TRUE;DB_CLOSE_ON_EXIT=FALSE;AUTO_SERVER=TRUE";

        Connection conn = null;
        System.setProperty("h2.bindAddress", "127.0.0.1");
        Class.forName("org.h2.Driver");
        conn = DriverManager.getConnection(dbpath, "sa", "sa"); 
        conn.setAutoCommit(false);
        System.out.println("success.  querying database for latest values...");

        Statement qry = conn.createStatement();
        String sql = "select id from CONSTITUENTS where manager = 'abc' limit 1";                               
        ResultSet rset = qry.executeQuery(sql);
        while (rset.next()) {
            int id = rset.getInt("id");
            System.out.println(id);         
            qry.executeUpdate("insert into PAYREQUESTS (constituent, inblock) values (" + id + ", 238)");
        }
        rset.close();
        qry.close();    
    }
}

这是输出:

success.  querying database for latest values...
103
Exception in thread "main" org.h2.jdbc.JdbcSQLException: The object is already closed [90007-196]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
    at org.h2.message.DbException.get(DbException.java:179)
    at org.h2.message.DbException.get(DbException.java:155)
    at org.h2.message.DbException.get(DbException.java:144)
    at org.h2.jdbc.JdbcResultSet.checkClosed(JdbcResultSet.java:3208)
    at org.h2.jdbc.JdbcResultSet.next(JdbcResultSet.java:130)
    at RsetTest2.main(RsetTest2.java:22)

其中 22 对应于“while (rset.next()) {”行

数据库正在返回值,请参阅为我们提供 103 的 println 语句。

更奇怪的是,如果我 // 注释掉executeUpdate 行,一切都会正常完成


线程“main”org.h2.jdbc.JdbcSQLException 中出现异常:对象已关闭 [90007-196]

你的问题是你正在重用SQLStatement在你的里面while环形。一旦您拨打电话qry.executeUpdate(...)循环中的方法,ResultSet rset与前一个语句关联的已关闭,因此会出现错误。它是while(rset.next())称为的语句after首先executeUpdate(...)在失败的循环中。

如果您使用new循环中的语句然后它应该可以工作。

Statement qry = conn.createStatement();
String sql = "select id from CONSTITUENTS where manager = 'abc' limit 1";
ResultSet rset = qry.executeQuery(sql);
while (rset.next()) {
    int id = rset.getInt("id");
    System.out.println(id);
    // we can't reuse the same Statement here so we need to create a new one
    conn.createStatement().executeUpdate("insert into PAYREQUESTS ...");
}

您可以考虑保留必要更新的集合,然后在循环结束时发出更新。

更奇怪的是,如果我 // 注释掉executeUpdate 行,一切都会正常完成

是的,听起来不错。一点也不奇怪。 :-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

org.h2.jdbc.JdbcSQLException:对象已关闭 的相关文章

  • 序列化 ArrayList

    我正在尝试编写一个 Android 游戏 即使用户想要返回主菜单或者活动被系统终止 我也希望能够暂停游戏 onSaveInstanceState 似乎并没有给我很大的控制权来决定何时可以读回捆绑包 而且据我所知 捆绑包仅在短时间内有效 所以
  • 配置 Eclipse 将 App Engine 类预先捆绑到单个 JAR 中以加快预热速度

    在与另一家同样使用 App Engine 的公司的同事进行讨论后 他告诉我 他通过以下步骤成功地将应用程序预热时间从约 15 秒缩短到约 5 秒 配置 Eclipse 将编译过程中生成的类捆绑到单个 JAR 文件中 配置 Eclipse 以
  • 使用 s:select 标签在下拉菜单中使用 i18n [重复]

    这个问题在这里已经有答案了 我的 JSP 页面中有一个下拉菜单 它是通过
  • 如何创建仅接受字母数字字符的正则表达式? [复制]

    这个问题在这里已经有答案了 可能的重复 字母数字和下划线的正则表达式 https stackoverflow com questions 336210 regular expression for alphanumeric and unde
  • 调试器不会停止在 Intellij IDEA 中的源代码处

    我有一个相当奇怪的问题 无法使用 Intellij IDEA 解决 我正在解析电子邮件文件org apache james mime4j包裹 但我的邮件文件格式不兼容Date 标头 因此 我从 mime4j 源创建了模块 并从磁盘中删除了
  • 内部/匿名类的最佳实践[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 匿名类和静态内部类的最佳实践 设计和性能方面 是什么 就我个人而言 我认为静态内部类提供了更好的封装 并且应该提供更好的性能 因为它们无法访问类
  • 如何确定 JDialog 显示在哪个屏幕上

    我有一个非常大的应用程序 有多个对话框 我的任务是确保不完全可见的对话框 因为用户将其从可见屏幕区域拉出 移回屏幕中心 当我只处理一个屏幕时 这没问题 它工作得很好 但是 该应用程序的大多数用户的桌面上都有两个屏幕 当我尝试找出对话框显示在
  • 是否有任何理由使用 ZoneId.of("UTC") 而不是 ZoneOffset.UTC ?

    有什么理由使用ZoneId of UTC 代替ZoneOffset UTC 我们知道两者之间的区别 如ZoneOffset UTC 和 ZoneId of UTC 之间有什么区别 https stackoverflow com questi
  • 如何在 SpringBoot v3.0.0 中使用嵌入式 MongoDB?

    我正在尝试连接嵌入式 mongodb 并使用 MongoDbSpringIntegrationTest 对其进行测试 问题是相同的代码在 2 7 7 中适用于 spring boot 但在 3 0 0 中不适用于 spring boot 问
  • Android 的@hide 注解到底有什么作用?

    Android中很多内部API都被标记出来了 hide What exactly这是吗 另一个答案 https stackoverflow com questions 17035271 what does hide mean in the
  • 是否有适用于 Java 的 CalDAV 客户端库? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想使用 CalDAV 协议与我的日
  • 在休眠搜索中使用现有分析器AnalyzerDiscriminator

    Entity Indexed AnalyzerDefs AnalyzerDef name en tokenizer TokenizerDef factory StandardTokenizerFactory class filters To
  • String.intern() 线程安全吗

    我想在Java中使用 String intern 来节省内存 对具有相同内容的字符串使用内部池 我从不同的线程调用这个方法 这是个问题吗 对你的问题的简短回答是肯定的 它是线程安全的 但是 您可能需要重新考虑使用此工具来减少内存消耗 原因是
  • org.apache.poi 中的异常

    我试图编写一个可以读取和写入的程序 xlsx文件中 下面提供的代码旨在能够编写其第一个 Excel 程序 package excel reader import java io FileOutputStream import java io
  • SFTP Java - 管道关闭 Jsch 异常

    我正在研究一种 java 方法 将文件从一个位置复制到另一个远程位置 我的代码如下 我尝试使用jsch 0 1 42 0 1 50 0 1 54 public static void processFiles ArrayList
  • 如何在列表视图中选择时启用视频序列自动播放?

    大家好 有人可以与我分享一下我如何编写我的 viewvideo java 类 以便它允许自动播放视频功能 自动排序在列表视图中播放所选视频的任务 从当前位置到最新录制的视频 按顺序直到最新的视频播放完毕 这类似于 YouTube 自动播放功
  • 使用 ProcessBuilder 启动 CMD

    我尝试使用以下代码在 Windows 中启动 CMD 应用程序 但它无法按预期工作 来自不同网站的几个示例表明 cmd 作为 ProcessBuilder 构造中的参数应该有效 我需要做什么才能让我的 Java 应用程序在 Windows
  • 使用 SimpleDateFormat、Java 进行错误的日期解析

    我需要使用日期模式 yyyy MM dd 解析输入字符串中的日期 如果日期采用任何其他格式 则抛出错误 这是我解析日期的代码 private void validateDate throws MyException Date parsedD
  • 使用替换但不使用根元素的 Jaxb 继承

    我正在浏览布莱斯的博客http blog bdoughan com 2010 11 jaxb and inheritance using substitution html http blog bdoughan com 2010 11 ja
  • 找出对象列表中是否包含具有指定字段值的内容?

    我有一个从数据库收到的 DTO 列表 它们有一个 ID 我想确保我的列表包含具有指定 ID 的对象 显然 在这种情况下创建具有预期字段的对象不会有帮助 因为 contains 调用 Object equals 并且它们不会相等 我想出了这样

随机推荐

  • 迭代 Capybara 中的项目

    我有一个包含 block 类的多个元素的页面 在 Capybara 中 我希望能够在完成操作之前循环遍历并引用此类中的每个元素 但是 到目前为止我尝试过的代码都不起作用 这是我尝试过的 within block nth child 1 do
  • 同时刷新物化视图会导致表膨胀

    在 PostgreSQL 9 5 中 我决定创建一个物化视图 effects 并安排每小时并发刷新 因为我希望它始终可用 REFRESH MATERIALIZED VIEW CONCURRENTLY effects 一开始一切都很顺利 我的
  • mysql_fetch_array 回显为 json

    我试图弄清楚如何输出我的 php 以回显我的 json 文件
  • Oracle SQL 使用 listaggs 生成随机输出

    我的值是 30 31 32 和 33 我如何生成一个输出 随机 其中可能包含该列表的单个值 它们的 listaggs 或空值 id val 1 30 31 2 null 3 32 4 33 5 null 6 31 33 7 null 8 3
  • java语言除法错误

    我有一个简单的java程序 它没有按照我认为应该的方式运行 public class Divisor public static void main String args int answer 5 2 System out println
  • SQLAlchemy delete() 函数会刷新,但不会提交,即使在调用 commit() 之后也是如此

    我有一个flask使用的应用程序sqlalchemy读 写postgres架构 当我使用 delete 函数时 它只会刷新 但不会发生对数据库的实际更改 Session sessionmaker autocommit False autof
  • 在 Unity 2d 中使用坐标系和游戏屏幕?

    因此 我在其他平台上开发了 x y 坐标系对我有意义的游戏 左上角代表游戏屏幕 坐标为 0 0 右下角代表 宽度 高度 现在我正在尝试跳转到 Unity 2d 但我无法理解游戏屏幕是如何工作的 如果我在屏幕上有一个背景对象和一个角色对象 当
  • 无法在运行时编译 .Net 5 中的字符串[重复]

    这个问题在这里已经有答案了 我尝试编译字符串 但出现错误System PlatformNotSupportedException Operation is not supported on this platform P S 我在以前版本的
  • 在 Postgres 中将时间戳截断为 5 分钟的最快方法是什么?

    Postgres 可以使用 date trunc 函数舍入 截断 时间戳 如下所示 date trunc hour val date trunc minute val 我正在寻找一种将时间戳截断为最近的 5 分钟边界的方法 例如 14 26
  • 托盘图标的文本叠加

    我有一个使用 PyGTK 的简单托盘图标gtk StatusIcon http www pygtk org docs pygtk class gtkstatusicon html import pygtk pygtk require 2 0
  • mongodb 将文档从一个集合移动到另一个集合

    How can 文件 be 从一个集合移动到另一个集合 in MongoDB 例如 我在集合 A 中有很多文档 我想将所有 1 个月前的文档移动到集合 B 这些 1 个月前的文档不应该在集合 A 中 Using 聚合我们可以做的copy 但
  • 如何检查 TCP 发送缓冲区的容量以确保数据传送

    我想向我的 TCP 接口添加递送确认 非阻塞写入可以填充发送缓冲区 但如果连接失败 数据可能永远不会到达 同时写入已报告数据已接收 通过本地套接字 如果我向堆栈添加额外的确认 我可以验证是否收到了每条数据 我认为 ftp 就是这样做的 但我
  • 使用 Indy 的 IDTCPClient 从响应流获取 HTML [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个前员工创建的组件 它使用 Indy IDTCPClient 和以下方法来执行请求 其中 aReadHeader 是 在传入之前构建的
  • 使用 Google DataFlow/Apache Beam 并行化图像处理或爬行任务是否有意义?

    我正在考虑将 Google DataFlow 作为运行管道的选项 该管道涉及以下步骤 从网络下载图像 处理图像 我喜欢 DataFlow 管理完成工作所需的虚拟机的生命周期 因此我不需要自己启动或停止它们 但我遇到的所有示例都使用它来执行数
  • 如何使卡片列水平排序?

    我有一个智能滚动的卡片列表 虽然我喜欢它的外观card columns 它从上到下排序 这非常令人沮丧 如下所示 1 4 7 2 5 8 3 6 9 对于内容加载多个项目的任何内容 这种垂直排序似乎基本上毫无用处 如果我有 50 个项目 一
  • == 和 eq 运算符

    scala gt val x a x String a scala gt val y a y String a 我认为 将会通知equals 价值平等 scala gt x y res18 Boolean true But x eq y 出
  • 如何在 JavaScript 中检查输入是否为空? [复制]

    这个问题在这里已经有答案了 我正在尝试做一个阶乘计算器 如何检查输入是否为空 我尝试过 空 但它不起作用或者我无法正确使用它 抱歉这个愚蠢的问题 我是新手JavaScript function myFriday var input docu
  • 从任务内访问 Rake 任务描述

    在 rake 任务中如何查询描述 会给出的东西 desc Populate DB task populate environment do puts task desc Populate DB end task必须定义为任务块的参数 des
  • AVQueuePlayer.timeControlStatus 上的 KVO 始终给出 nil 值

    我正在使用KVO来监控AVQueuePlayer timeControlStatus timeControlStatusObservation avPlayer observe AVQueuePlayer timeControlStatus
  • org.h2.jdbc.JdbcSQLException:对象已关闭

    对于我的一生 我看不出它是如何 已经关闭 的 import java sql Connection import java sql DriverManager import java sql ResultSet import java sq