JDBC SQL 数据库被锁定?

2023-12-24

我正在编写一个使用本地 SQL 数据库来存储数据的程序。

我正在使用这里找到的驱动程序:https://bitbucket.org/xerial/sqlite-jdbc https://bitbucket.org/xerial/sqlite-jdbc

我正在尝试从数据库中读取内容并将 tableName 的内容放入 JTable 中,如下所示:

public Object[][] getTable(String tableName){
    int columns = getColumnNumber(tableName);
    int rows = getRowNumber(tableName);
    String[] columnNames = getColumnNames(tableName);
    Object[][] table = new Object[rows][columns];
    try{
        Connection connection = DriverManager.getConnection("jdbc:sqlite:" + dbName + ".db");
        Statement stmt = connection.createStatement();
        ResultSet rs = stmt.executeQuery("select * from " + tableName);
        for(int r = 0; r < rows; r++){
            rs.next();
            for (int c = 0; c < columns; c++){
                table[r][c] = rs.getString(columnNames[c]);
            }
        }
        return table;           
    }catch(Exception e){
        System.out.println("ERROR CREATING TABLE ARRAY");
        e.printStackTrace();
        return null;
    }
}

然后我尝试返回并向表中添加一行:

public boolean addRow(String tableName, Object[] values){
    if(!isDataAcceptable(tableName, values))
        return false;
    try{
        String stmt = "insert into " + tableName + " values (";
        for(int c = 0; c < values.length; c++){
            if(values[c] instanceof String)
                stmt += "'" + values[c] + "'";
            else
                stmt += values[c];
            if(c == (values.length - 1))
                    stmt += ");";
            else
                stmt += ", ";
        }
        System.out.println(stmt);
        Connection connection = DriverManager.getConnection("jdbc:sqlite:" + dbName + ".db");
        Statement statement = connection.createStatement();
        statement.executeUpdate(stmt);
        return true;
    }catch(Exception e){
        System.out.println("ERROR INSERTING ROW");
        e.printStackTrace();
        return false;
    }
}

然后我想用新行更新之前创建的 JTable。

然而,当我尝试添加行时,它会导致异常:

java.sql.SQLException: database is locked

指向该行:

statement.executeUpdate(stmt);

...在 addRow() 方法中。

为什么数据库被锁定以及如何解锁才能写入?


为什么数据库被锁定以及如何解锁才能写入?

数据库很可能被锁定addRow因为之前的调用getTable没有关闭结果集。该代码还无法关闭数据库连接对象,这将导致资源泄漏。

基本的修复方法是调用close() on the rs and connection对象,但您需要以正确的方式进行操作以使代码可靠。

以下是在 Java 7 中使用“try with resources”语法执行此操作的推荐方法:

try (Connection connection = 
         DriverManager.getConnection("jdbc:sqlite:" + dbName + ".db"),
     Statement stmt = connection.createStatement(),
     ResultSet rs = stmt.executeQuery("select * from " + tableName)) {
  for (int r = 0; r < rows; r++) {
    rs.next();
    for (int c = 0; c < columns; c++) {
      table[r][c] = rs.getString(columnNames[c]);
    }
  }
  return table;           
} catch (Exception e) {
    System.out.println("ERROR CREATING TABLE ARRAY");
    e.printStackTrace();
    return null;
}

您也可以通过致电来做到这一点close明确地在finally块,但它更冗长,如果您有需要关闭的相关资源......就像这里一样,代码可能很难正确。

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

JDBC SQL 数据库被锁定? 的相关文章

  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 使用间隔阈值对不同的连续时间戳记录进行分组

    我有一系列间歇性间隔的带有时间戳的 GPS 坐标 我正在使用 PostGIS 将它们渲染到地图画布上 为了渲染它们 需要使用 PostGIS 中的 ST MakeLine 聚合函数将点聚合成线 从而在地图上留下 GPS 数据丢失的间隙 数据
  • 在 postgres 查询中使用列表

    我有一个动态列表 list a b c d 所以长度可能会改变 我想在查询中比较这些列表值 select from student where name in all the list values 我想将列表值传递到此查询中 我怎样才能做
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • 如何在NiFi中映射流文件中的列数据?

    我有 csv 文件 其结构如下 Alfreds Centro Ernst Island Bacchus Germany Mexico Austria UK Canada 01 02 03 04 05 现在我必须将这些数据移入数据库 如下所示
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 索引数量越少意味着插入、更新和删除速度更快? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 postgres 和 node js 在单个语句中执行多个查询

    我需要在像这样的单个语句中执行插入和删除查询 INSERT INTO COMPANY ID NAME VALUES 1 Paul DELETE FROM COMPANY WHERE ID 12 这是我用于执行查询的 node js 代码 p
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo

随机推荐

  • 依赖性分析工具 - 更新回归测试用例[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Problem 我想这是一个很常见的问题 添加新代码会导致回归 现有的测试用例变得过时 代码中的依赖关
  • 替换与正则表达式中的字符不匹配的字符

    我有这个正则表达式 private static final String SPACE PATH REGEX a z A Z 0 9 我检查我的字符串是否与此正则表达式匹配 如果不匹配 我想用 替换所有不在这里的字符 我尝试过 privat
  • 未捕获的 URIError:URI 格式错误 - Windows 上的 jquery UI 选项卡

    我在本地 Windows 开发环境中使用 jquery UI 选项卡 我正在用他们测试演示代码 http jqueryui com tabs default div ul li a href tabs 1 Nunc tincidunt a
  • 将 firebase 数据库 url(String) 分配给数据库引用变量?

    我正在尝试将一个包含数据库中某个位置的 url 的字符串分配给 DatabaseReference 类型 例子 String strRef my database url DatabaseReference ref here I want
  • 注意:未定义索引:HTTP_REFERER

    注意 未定义索引 HTTP REFERER http referer SERVER HTTP REFERER 我在教程中使用了这个 看起来还不错 代码还从包含文件中调用它 我应该改变什么 我添加了 print r SERVER 现在页面给了
  • AngularJS中页面刷新或移动到另一个页面后保留下拉值

    让我解释一下我的情况 我的主页中有下拉列表 如果更改了下拉列表 则数据的更改取决于下拉列表的值 如果我刷新页面或移至另一个页面 下拉列表将自动清除 我想在刷新页面或移动到另一个页面后保留下拉列表值 我尝试这样做 但这没有帮助 HTML
  • 将方法转换为静态方法时的内存使用情况

    我开始使用 Resharper 它指示何时使用一种方法could设为静态 将数百个方法转换为静态方法会在很长一段时间内增加内存占用吗 否 更改为静态方法对内存没有影响 第一次引用类型 无论是静态还是非静态 时 都会初始化所有静态成员并运行静
  • 为 Caffe 生成 LMDB

    我正在尝试使用 caffe 我正在使用 python 包装器 构建用于显着性分析的深度学习模型 但我无法理解如何为此目的生成 lmdb 数据结构 我已经浏览了 Imagenet 和 mnist 示例 我明白我应该以以下格式生成标签 my t
  • 如何添加日期时间字段和时间字段

    我必须添加time对现有的价值datetime在 SQL Server 2012 中使用 T SQL 的值 我在想DATEADD http msdn microsoft com en us library ms186819 aspx功能它可
  • 如何在node.js上运行.php脚本

    我使用 wamp 服务器和 node js 来运行我的应用程序 server js 但是当我想执行 php 脚本时 我总是收到错误 POST http localhost 8080 login php 404 Not Found 服务器 j
  • 从 VBA 定义的宏创建 PowerPoint 加载项

    因此 我在 PowerPoint 演示文稿中创建了一个宏 并且希望其他人可以轻松使用该宏 根据我收集的信息 最好的方法是创建一个Add in 我看到几篇文章指出要执行以下操作 但我仍然遇到问题 打开新的 PowerPoint 演示文稿 使用
  • 如何从一个项目创建多个apk?

    我有一个 android 项目 我需要在其中创建多个 apk 每个 apk 之间的唯一区别是包名称 例如 com my package name 和应用程序字符串名称 因此我可以在一台设备上安装该应用程序的多个实例 有更好的方法吗 我考虑过
  • PL/SQL:有什么技巧可以避免对象的克隆吗?

    如果我们将一个对象变量分配给 pl sql 中的其他对象变量 则该对象将被克隆 因为 pl sql 不支持引用 例如 以下代码将打印两个不同的句子 create or replace type cla as object class wou
  • 在 Firebase Storage Swift 中使用图像引用数据库中的 Firebase 用户

    通常我可以在网上找到这个问题的答案 但由于它太新了 我一直遇到麻烦 当我让用户登录应用并为其个人资料选择 4 5 张图片时 如何将这些图像存储在 Firebase 存储中 并在 Firebase 数据库中将这些图像引用给该用户 Thanks
  • 如何在php中制作活动导航栏?

    您好 我正在尝试使我的导航栏在 php 中处于活动状态 以便用户可以知道他们所在的页面 我是php新手 对它了解不多 那么如何在此代码中添加 class active 来创建活动导航栏并在同一 index php 页面中显示所有页面 a h
  • ValueError:尺寸不匹配

    I use SciPy http scipy org and scikit学习 http scikit learn org stable 训练并应用多项式朴素贝叶斯分类器进行二进制文本分类 准确地说 我使用该模块sklearn featur
  • 序列化复杂类型 System.Nullable

    我想序列化 DateTime 以便当 DateTime 为 null 时我无法获取标签本身 我还设置了为上面指定的 bool 值 但我的问题是 DateTime 是值类型 它永远不会为 null 因此指定的 bool 值将始终为 true
  • Chrome 中的 Javascript 调试 - 对象名称?

    不知道 下图中圈出的东西 叫什么 使我的问题很难找到答案 下图中我圈出的东西叫什么名字 实际上是什么 myObject myFunction 是无关紧要的 我希望能够将其写到控制台 我尝试过以下方法 console log sp outpu
  • Spring Boot 2 未序列化 LocalDateTime

    我最近尝试使用 spring boot 2 实现一个微服务 现在 每当我尝试返回一个包含java time LocalDateTime从我的 REST 服务中 LocalDateTime 被序列化为整数数组 就像这样 id 5bf1425f
  • JDBC SQL 数据库被锁定?

    我正在编写一个使用本地 SQL 数据库来存储数据的程序 我正在使用这里找到的驱动程序 https bitbucket org xerial sqlite jdbc https bitbucket org xerial sqlite jdbc