语句关闭后不允许进行任何操作

2023-11-26

我收到带有签名的异常No operations allowed after statement closed.在我的 Java 代码中,我试图将值插入数据库。错误签名表明我的 Statement 对象被关闭,我试图在我的代码中再次使用它,但我很难理解为什么会发生这种情况,因为我没有关闭代码中任何地方的任何连接。

这是 Java 代码。

public class DataBaseAccessUtils {

    private static String jdbcUrl = 
            AppConfig.findMap("BXRequestTracker").get("jdbcUrl").toString();
    private static Connection connection = null;
    private static Statement statement = null;

    public static void insertHostname(String hostname, String rid, String fleet, String locale)
    {
        locale.toUpperCase();
        String sql = "UPDATE " + locale + "REQUESTTRACKER SET " + fleet 
                + "='" + hostname + "' WHERE RID='" + rid + "'";
        try {
            statement.execute(sql);
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static Statement connectToDatabase() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(DataBaseAccessUtils.jdbcUrl);
            statement = connection.createStatement();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return statement;
    }

我还观察到,当存在单线程执行时,错误不会出现,当多个线程尝试同时更新数据库时,错误就会出现。


创建一个用于连接管理的实用程序类,以便在整个应用程序中的单点上对其进行管理。

不要加载DataSource每次您需要新连接时。

示例代码:

public class ConnectionUtil {

    private DataSource dataSource;

    private static ConnectionUtil instance = new ConnectionUtil();

    private ConnectionUtil() {
        try {
            Context initContext = new InitialContext();
            dataSource = (DataSource) initContext.lookup("JNDI_LOOKUP_NAME");
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }

    public static ConnectionUtil getInstance() {
        return instance;
    }

    public Connection getConnection() throws SQLException {
        Connection connection = dataSource.getConnection();
        return connection;
    }

    public void close(Connection connection) throws SQLException {
        if (connection != null && !connection.isClosed()) {
            connection.close();
        }
        connection = null;
    }

}

始终关闭连接并处理它try-catch-finally

        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            conn = ConnectionUtil.getInstance().getConnection();

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

语句关闭后不允许进行任何操作 的相关文章

随机推荐

  • 在线性时间内从排序数组构建红黑树

    我知道如何通过 n 次插入来构建它 每次插入的效率为 O log n n log n 总体 我还知道 2 3 4 树的等效结构也可以用线性时间从排序数组构建 谁能提供有关红黑版本的简单解释吗 无论您要构建哪种 BST 算法将是相同的 只需要
  • 了解 Rails 迁移语句 (:null => false)

    我试图理解以下声明 它来自 Rails 迁移文件 x datetime new null gt false x datetime update null gt false 我理解这两个语句的第一部分 逗号之前的所有内容 但我不确定空部分 n
  • 尝试比较两个文本文件,并根据信息创建第三个文本文件

    我有两个文本文件 master txt 和 926 txt 如果 926 txt 中有一行不在 master txt 中 我想写入一个新文件 notinbook txt 我写了我能想到的最好的东西 但考虑到我是一个糟糕的 新手程序员 它失败
  • FluentFTP - 连接时出现错误“尝试从套接字流读取数据超时!”

    Getting 尝试从套接字流读取数据超时 使用 FluentFTP 连接到 FTP 时 以下是我用来连接的源代码 Console WriteLine Configuring FTP to Connect to 0 hostname ftp
  • 我听说全局变量不好,我应该使用什么替代解决方案?

    我读过所有的地方全局变量不好并应使用替代方案 具体来说 在 Javascript 中 我应该选择什么解决方案 我正在考虑一个函数 当输入两个参数时 function globalVariables Variable Value 查看变量是否
  • addChildViewController 和 PresentViewController

    iOS 5引入了自定义容器视图控制器的概念并提供了类似的APIaddChildViewController 问题 您可以将视图控制器添加为子视图控制器并仍然使用它来呈现它吗presentViewController 执行后者是否会自动使其成
  • Java 将 áéőűú 更改为 aeouu [重复]

    这个问题在这里已经有答案了 可能的重复 从 Unicode 字符中删除变音符号 有没有办法去掉重音符号并将整个字符串转换为常规字母 我怎样才能做到这一点 谢谢您的帮助 我认为你的问题与这些相同 Java 摆脱重音并将其转换为常规字母 将 J
  • 如何保存带有缩进的 MSXML2.DomDocument? (我认为它使用MXXMLWriter)

    我有一个 MSXML2 DomDocument 的实例 我挥手将其保存 并缩进 此代码有效 但不缩进 var dom new ActiveXObject MSXML2 DomDocument fiddle with dom here dom
  • JAVA_HOME 未设置

    在工作的同时Hadoop在伪分布式操作中实现 我发现以下异常JAVA HOME变量未设置 但当我尝试回显它时 它已设置 变量预设在conf hadoop env sh 编辑export JAVA HOME usr lib jvm java
  • 仅按变体比较枚举,而不按值比较

    我有一个具有以下结构的枚举 enum Expression Add Add Mul Mul Var Var Coeff Coeff 其中每个变体的 成员 都是结构 现在我想比较两个枚举是否具有相同的变体 所以如果我有 let a Expre
  • 在文档就绪时访问 primefaces widgetvars

    我正在尝试访问文档上的 primefaces 组件 如下所示 function var showDialog getUrlParameter showDialog if showDialog true PF myDialog show 但在
  • 如何控制android后退按钮路线?

    Onsen 中的默认设置是当按下设备后退按钮时应用程序关闭 存在 有什么方法可以控制 Onsen 中的 ons navigator 操作 页面历史记录吗 Thanks 对于 PhoneGap Cordova 按下后退按钮时会触发后退按钮事件
  • 如何使用 importmap 在 Rails 7 中安装 jQuery?

    我有一个新的 Rails 7 应用程序 我目前正在尝试学习自 Rails 5 以来的所有新功能 我想在我的 javascript 文件中使用以下代码 但到目前为止我收到以下错误 Uncaught ReferenceError is not
  • 构建基于角色的应用程序

    我要做一个小网站 我有 7 种类型的用户 即可登录系统 一些用户仅具有添加设备的权限 而其他用户则可以添加 编辑 其中一些只能查看 系统中添加设备的所有用户都会有一些通用字段 而一些字段将是用户特定的 我必须跟踪用户更改设备时设备的所有更改
  • Rails - 回形针 - 如何在保存前检查图像尺寸

    我有一个带回形针的 Rails 3 应用程序 我想防止宽度 高度为 LTE 50x50 的图像被回形针保存 这可能吗 是的 这是我为我的应用程序编写的自定义验证 它应该在您的应用程序中逐字工作 只需将像素设置为您想要的任何值即可 def f
  • Java 是否“缓存”匿名类?

    考虑以下代码 for int i 0 i lt 200 i ArrayList
  • 如何将 stdout 重定向到 Windows 应用程序中的某些可见显示?

    我可以访问一个做 好东西 的第三方库 它向标准输出发出状态和进度消息 在控制台应用程序中 我可以很好地看到这些消息 在 Windows 应用程序中 它们只是转到位存储桶 是否有一种相当简单的方法将 stdout 和 stderr 重定向到文
  • 如何将“自定义功能帮助”添加到 Google 电子表格。 - 不是脚本编辑器

    可以将 自定义功能帮助 添加到谷歌电子表格吗 即 如果我在电子表格单元格中输入 sum 我会得到浮动帮助文本 有没有办法用自定义函数来做到这一点 谷歌应用程序脚本中的文档是使用 JSDoc 创建的http en wikipedia org
  • Microsoft Access VBA - 运行时错误“3075”

    我遇到了运行时错误 3075 我是VBA新手 gt 例如 如果我在文本框 txtMainName 中输入名称 Sally 则单击搜索按钮后会弹出错误 错误 运行时错误 3075 查询表达式中存在语法错误 缺少运算符 And Main App
  • 语句关闭后不允许进行任何操作

    我收到带有签名的异常No operations allowed after statement closed 在我的 Java 代码中 我试图将值插入数据库 错误签名表明我的 Statement 对象被关闭 我试图在我的代码中再次使用它 但