Hi,
rene
Hast du deine Statements und Reslutsets nach der Abarbeitung geschlossen? Wenn du als Fehlermeldung „too many open cursors“ bekommst ist das meistens die Ursache.
Bei mehreren Zugriffen auf eine Tabelle solltest du immer PreparedStatements benutzten, damit bereitest du das Statement in der DB vor und sendest immer nur die Parameter:
PreparedStatement prepstmt= myConnection.prepareStatement("Insert into mytable (spalte1, spalte2, spalte3) VALUES ( ? , ? , ? ) ");
// dann pro Schleifendurchlauf
prepstmt.setString(1, loadValue1);
prepstmt.setInt(2, loadValue2);
prepstmt.setDouble(3, loadValue3);
// wobei der erste Übergabewert der index der Fragezeichens ist und „loadValue“ der einzufügende Wert sein soll
prepstmt.executeUpdate();
… und wenn die Schleife durchlaufen ist unbedingt
prepstmt.close();
aufrufen.
Das gleiche auch bei Abfragen mit veränderlichen Kriterien auf der gleichen Spalte:
PreparedStatement stmt= myConnection.prepareStatment(" Select * from myTable where spalte1 = ? and spalte2 = ? ");
stmt.setInt(1, i);
stmt.setInt(2, k);
ResultSet res= stmt.executeQuery();
while(res.next()) …
und bei jedem Schleifen durchlauf:
res.close();
und am Ende das PreparedStatement schliessen.
Die Connection jedesmal erneut herstellen kostet Zeit
und bei mehreren Clients wird die DB langsam.
Raimund