私はjava SQLライブラリを使ってリモートSQLサーバから読み書きするJavaアプリケーションを最適化しようとしています。 (これはプロジェクト用です)。Javaを使用してDBサーバーと永続的な接続を設定する方法は?
我々は、次のライブラリーに限定されています
com.mysql.*
java.io.*
java.lang.*
java.sql.*
java.text.*
java.util.*
javax.sql.*
そして、我々は我々のJVM上の8メガバイトのメモリ制限があります。
コードの設定方法は、データベースにアクセスする必要のあるすべての機能に対して、新しい接続が作成されて閉じられます。例えば:...
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/
は、私は、デフォルトでは、メモリに結果セット全体をバッファリングJVMを削減するために、statement.setFetchSize(Integer.MIN_VALUE);
機能を使用していますが、それは助けにはならなかった。
この問題の修正方法に関するご意見は、大変ありがとうございます。ありがとうございます。