私は jtds 接続ドライバーを使用して非常に新しいです。約 2500 の大きな xml を読み取り、SQL クエリを作成して SQL サーバーに対して実行するアプリケーションを作成しました。特定の量の xml に達すると、プログラムの実行でメモリが不足することがわかりました。メモリ アナライザーを使用して Eclipse で phd ダンプ ファイルをチェックしたところ、net.sourceforge.jtds.jdbc.cache.SimpleLRUCache が大量のメモリを保持していることがわかりました。一度 SQL サーバーに接続し、すべてのクエリをフラッシュするまで接続を維持します。以下は、サーバーに対してクエリを実行するための私のコードです。net.sourceforge.jtds.jdbc.cache.SimpleLRUCache クラスへのハンドルを取得する方法がわかりません。これは、キャッシュをクリアすると思われる clear メソッドがあるためです。繰り返しますが、私は jtds ドライバーについてあまり詳しくありません。誰でもこれを解決するのを手伝ってもらえますか?
public boolean runQueries(String query){
if (getConn() != null && query != null) {
Statement statement = null;
try {
long start = System.currentTimeMillis();
try {
if(log.isLoggable(Level.FINEST)){
log.finest("Processing: "+query);
}
statement = getConn().createStatement();
statement.executeUpdate(query);
} catch (Exception e) {
if(log.isLoggable(Level.FINEST)){
log.log(Level.SEVERE, "Failed to process query: "
+ query, e);
}else{
String reportQuery = query.length() > MAX_CHARS_DISPLAY ? query.substring(0,MAX_CHARS_DISPLAY)+"..." : query;
log.log(Level.SEVERE, "Failed to process query: "
+ reportQuery , e);
}
}finally{
if(statement != null){
try {
statement.close();
} catch (SQLException e) {
log.log(Level.SEVERE,"Failed to close statement: ",e);
}
}
}
long end = System.currentTimeMillis();
return true;
}finally{
if(statement != null){
try {
statement.close();
} catch (SQLException e) {
log.log(Level.SEVERE,"Failed to close statement: ",e);
}
}
}
}
return false;
}