gpt4 book ai didi

java - 如何使用Java与数据库服务器建立持久连接?

转载 作者:行者123 更新时间:2023-12-01 15:28:41 25 4
gpt4 key购买 nike

因此,我正在尝试优化一个使用 java sql 库从远程 SQL 服务器读取和写入的 Java 应用程序。 (这是一个项目)。

我们仅限于以下库:

com.mysql.*
java.io.*
java.lang.*
java.sql.*
java.text.*
java.util.*
javax.sql.*

我们的 JVM 内存限制为 8MB。

现在的代码设置方式是,对于每个需要访问数据库的函数,都会创建并关闭一个新连接。例如:

public static void Read()
{
Connection connection = NULL;
try {
connection = DriverManager.getConnection(EnvManager.getDbUrl());
Statement statement = connection.createStatement();

statement.setFetchSize(Integer.MIN_VALUE);

******* FUNCTION ********
}finally {
if(connection != null) {
try {
connection.close();
} catch (Exception e) {
}
}
}

public static void Write()
{
Connection connection = NULL;
try {
connection = DriverManager.getConnection(EnvManager.getDbUrl());
Statement statement = connection.createStatement();
statement.setFetchSize(Integer.MIN_VALUE);

******* FUNCTION ********
}finally {
if(connection != null) {
try {
connection.close();
} catch (Exception e) {
}
}
}

等等...

我正在尝试建立持久连接,以便我可以传入连接对象,即

...
...
Connection connection = NULL;
try {
connection = DriverManager.getConnection(EnvManager.getDbUrl());
Read(connection);
Write(connection);

}finally {
if(connection != null) {
try {
connection.close();
} catch (Exception e) {
}
}
...
...

但是,当我尝试执行此操作时,每当我尝试向数据库写入然后读取大文件(任何超过 5 MB 的文件)时,我的 JVM 都会不断抛出内存不足的错误。

我的问题基本上是,当您创建一个连接对象并不断将其传递给函数时会发生什么?似乎每次使用时它都会以某种方式增长或复制。

我查看了这个网站:

http://benjchristensen.com/2008/05/27/mysql-jdbc-memory-usage-on-large-resultset/

这建议我使用 statement.setFetchSize(Integer.MIN_VALUE);函数,以限制 JVM 默认将整个结果集缓冲在内存中,但这没有帮助。

任何有关如何解决此问题的想法将不胜感激,谢谢。

最佳答案

如果您将相同的对象引用传递给其他方法,则它不应该复制任何内容。您只是传递对该对象的引用。可能发生的情况是,您可能没有在每次执行 SQL 时关闭 Statements 或PreparedStatements。

执行完查询后,您需要关闭所有会消耗资源的资源。这是一个例子

public void Read() {
Connection conn = null;
Statement statement = null;
ResultSet rs = null;

try {
connection = DriverManager.getConnection(EnvManager.getDbUrl());
statment = connection.createStatement();
statement.setFetchSize(Integer.MIN_VALUE);

// Do more stuff, iterate to ResultSet etc...
} catch (SQLException ex) {
// Exception handling stuff
...
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) { /* ignored */}
}
if (statment != null) {
try {
statment.close();
} catch (SQLException e) { /* ignored */}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) { /* ignored */}
}
}
}

关于java - 如何使用Java与数据库服务器建立持久连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9845321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com