我最近遇到了
org.sqlite.SQLiteException: [SQLITE_BUSY] 数据库文件被锁定(数据库被锁定)
我的桌面应用程序出现错误,因为我认为我使用单个连接跨方法读取和写入数据。因此,我从使用单个连接更改为每次读取和写入应用程序时创建一个新连接。 示例;在读取数据的每种方法中,我做了:
try {
Connection connection = DriverManager.getConnection(url);
// rest of my code
connection.close();
}
catch (SQLException e) {
e.printStackTrace();
}
注意,它解决了我的问题。
我的问题是,按照我上面描述的做法有什么影响吗?
读写数据也需要关闭
Statement
、ResultSet
等资源。每次查询后都需要关闭这些资源。如果您忘记关闭资源,那么您将面临资源泄漏,这是内存泄漏问题的一种情况。每次对数据库进行查询时,它都会打开一个事务,如果自动提交模式打开,则在执行语句后结束事务。事务会锁定数据库资源,但如果不同的线程使用相同的资源,则可能会造成死锁问题。为了避免使用 JDBC 时可能遇到的这些问题和许多其他问题,请使用每线程连接模式并在使用资源后关闭资源。
您有两个选择:
您使用哪种方法取决于您的应用程序的用户需求。