2016-04-15 8 views
1

Ich habe eine Anwendung, die Daten aus der Datenbank erhält und erstellen Excel. Ich wollte dao class separieren, die das resultSet von db und die Klasse, die excel erstellt, mit diesem resultset bekommt.Weitergabe von ResultSet an andere Methode

Auf diese Weise habe ich ResultSet von Dao an die andere Klasse übergeben, um Excel-Datei zu erstellen. Aber wenn ich die rs.next() ausführen, gibt es mir "Closed Resultset: next" -Fehler. Ich habe im Internet gelesen, dass die Weitergabe von ResultSet keine gute Idee ist, deshalb versuche ich es einfach in der DAO-Klasse zu tun und es hat funktioniert.

Aber auf diese Weise mag ich keine andere Aufgabe (creasting Excel) in Dao-Klasse und ich möchte nicht eine Klasse erstellen und senden Sie sie dann als Liste. Also meine Frage ist, warum es schlecht ist, Resultset zu anderen Klassen oder Funktionen zu übergeben? Warum habe ich eine Ausnahme erhalten, wenn ich sie übergebe und versuche, rs.next() aufzurufen?

meinen Code Zusammengefasst sieht aus wie diese:

ResultSet rs = myDao.getResult(); 
ExcelCreator excelCreator = new ExcelCreator(); 
excelCreator.createExcel(rs); 
+0

Überprüfen Sie, ob Sie in Ihrer DAO-Klasse die Verbindung schließen, da das Schließen der Verbindung auch zum Schließen von ResultSet führen kann –

Antwort

1

Weil es offen durch Erzwingen Verbindung zu Ressourcen undichten führen kann und Schließen Verbindung Ergebnismenge verursacht schließen. Daher verwenden wir die Sammlung von Objekten, um sie zurückzugeben.

1

Warum Sie "Closed resultset: next" immer Fehler finden Sie hier:

Why am I getting ResultSet is closed error when I never closed any

Ich nehme an, Sie sind nicht einige ORM-Framework wie Hibernate.

In diesem Fall ordnen Sie die Resultset-Daten im DAO zu oder erstellen Sie selbst einen Objekt-Mapper, der das ResultSet einem bestimmten Data Transfer Object zuordnet. Übergeben Sie dieses Objekt dann an die createExcel() -Methode.

Etwas wie folgt aus:

ResultSet rs = myDao.getResult(); 
List<ExcelDto> excelDtos = new ArrayList<>(); 
ExcelDto excelDto; 
while (rs.next()) {  
    excelDto = new ExcelDto();  
    dto.setXCol(rs.getString("XColumn")) 
    excelDtos.add(dto); 
} 
excelCreator.createExcel(excelDtos); 

Dann in der excelCreator Sie können anstelle von ResultSet mit einem Arraylist arbeiten.