sqlite 每次需要时创建和关闭数据库连接是否有任何影响?

p3rjfoxz  于 12个月前  发布在  SQLite
关注(0)|答案(1)|浏览(290)

我最近面对一个
org.sqlite.SQLiteException:[SQLITE_忙碌]数据库文件被锁定(数据库被锁定)
在我的桌面应用程序上出现了一个错误,因为我认为我使用了单个连接来跨方法读取和写入数据。所以,我从使用单个连接改为每次阅读和写入应用程序时创建一个新连接。例如,在每个阅读数据的方法中,我都这样做了:

try {
    Connection connection = DriverManager.getConnection(url);
    // rest of my code
    connection.close();
}
catch (SQLException e) {
    e.printStackTrace();
}

字符串

注意,它解决了我的问题

我的问题是,做我上面描述的事情有什么影响吗?

6fe3ivhb

6fe3ivhb1#

阅读和写数据也需要关闭资源,如StatementResultSet。这些资源需要在每次查询后关闭。如果你忘记关闭资源,那么你将面临资源泄漏,这是内存泄漏问题的一种情况。每次你对数据库进行查询时,它都会打开一个事务,如果自动提交模式打开,则会在执行语句后结束它。
Connection对象应该在方法结束时关闭。如果你没有关闭连接,它将保持活动状态并保留内存,它会强制内存泄漏(也称为资源泄漏).在java 8及以上版本中,此对象实现AutoClosable接口,可以与try-with-resources语句一起使用。同样的情况也与StatementResultSet有关,您应该关闭但是如果你显式地关闭连接,那么这些对象也会关闭。

try (Connection connection = db.getConnection();) {
 //your code here                         
}catch(SQLException e) {
 db.getErrorMessages(e);
}

字符串
事务锁定数据库资源,但如果不同的线程使用相同的资源,它们可能会造成死锁问题。为了避免这些问题以及使用JDBC时可能遇到的许多其他问题,请使用每个线程的连接模式,并在资源使用后关闭资源。
你有两个选择:
1.每次执行查询时获取一个新连接,然后沿着关闭所有资源。
1.使用数据源获取连接。这需要为应用程序配置连接池。
使用哪种方法取决于应用程序的用户需求。

相关问题