PostgreSQL データベースで JDBC を使用しています。結果セットでエンティティをクエリすると、5 行が返されます。そのエンティティに関連する別のエンティティは、上記の結果セットの行を使用しているときにクエリを実行します。このクエリを実行すると、上記の結果セットが閉じられます。
これは、一度に 1 つの接続で 1 つの結果セットのみをアクティブにできることを意味します。
以前は、同じコードが Oracle DB サーバーに対して完璧に機能していました。
複数の結果セットを許可するようにサーバーを構成するように DB 管理者に依頼する必要がありますか? または、コードに変更を加えるには?それともpostgreでそれを行うことは不可能ですか? 詳細については、次のコードを参照してください。
Connection conn = PTSConnection.getConnection();
Statement stmt = conn.createStatement();
ResultSet lines = stmt.executeQuery("SELECT LINEID,STARTSTOPID,ENDSTOPID FROM LINES"); **//first resultset is active**
while (lines.next()){
int lineId= lines.getInt(1);
Stop ss = StopStorage.getByID(lines.getInt(2));
Stop es = StopStorage.getByID(lines.getInt(3));
ResultSet stops = stmt.executeQuery("SELECT STOPID FROM STOPSINLINES WHERE LINEID=" + lineId); **//first resultset dies**
List<Stop> lineStops = new ArrayList<Stop>();
while(stops.next()){
Stop stop = StopStorage.getByID(stops.getInt(1));
lineStops.add(stop);
}
stops.close();
Line aLine = null;
ResultSet emergencyLine = stmt.executeQuery("SELECT CAUSE, STARTTIME, ENDTIME FROM EMERGENCYLINES WHERE LINEID =" + lineId);
if(emergencyLine.next()){
String cause = emergencyLine.getString(1);
Time startTime = emergencyLine.getTime(2);
Time endTime = emergencyLine.getTime(3);
aLine = new EmergencyLine(ss, es, cause, startTime, endTime, (Stop[]) lineStops.toArray(new Stop[lineStops.size()]));
} else {
aLine = new Line(ss, es, (Stop[]) lineStops.toArray(new Stop[lineStops.size()]));
}
emergencyLine.close();
LineRepository.getInstance().addLine(aLine);
}
lines.close();