Maximale Anzahl offener Cursor überschritten

Status
Nicht offen für weitere Antworten.

alonzogonzo

Mitglied
Hallo zusammen

Ich versuche eine DB mit einigen tausend Datensätzen zu füllen, die ich über einen Prozess zeilenweise verarbeite.

Nach einiger Zeit taucht die allseits bekannte "Maximale Anzahl offener Cursor überschritten" Fehlermeldung auf.

Ich frage mich nun was ich dagegen tun kann. Meines Wissens schliesse ich sowohl das Statement als auch das ResultSet aber das scheint nichts zu bringen und die max. Anzahl Cursor habe ich auf der DB bereits auf 2000 hochgeschraubt.

Könnt ihr mir sagen was ich noch tun kann oder was allenfalls an meinem Code falsch ist?

Danke für jeden Tipp.
Grüsse Phil

SQL:
  public void insertPortbelegungEintrag(String macAdresse,int portId,int switchId) throws Exception  {
      String sqlPortbelegungEintragNextId = "select portbelegungId.nextval from dual";
      String sqlSpeichernPortbelegungEintrag = "insert into port_temp values(?,?,?,?,?)";
      ResultSet result = null;
      PreparedStatement prepStmt = null;
      Connection con = null;
      Date datum = new Date();
      SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
      
      try {
          con = getConnection();
          prepStmt = con.prepareStatement(sqlPortbelegungEintragNextId);
          result = prepStmt.executeQuery();
          result.next();
          int portbelegungId = result.getInt(1);
          if(!result.next()) {
              prepStmt = con.prepareStatement(sqlSpeichernPortbelegungEintrag);
              prepStmt.setInt(1,portbelegungId);
              prepStmt.setString(2,macAdresse);
              prepStmt.setInt(3,portId);
              prepStmt.setString(4,df.format(datum));
              prepStmt.setInt(5,switchId);
              prepStmt.execute();
              prepStmt.close();
              result.close();
          }             
      } catch (Exception e) {
          System.out.println("Fehler: " + e);
      }
    finally {
        String message = ""; 
        result.close();
        try {
            if (prepStmt != null)
                prepStmt.close();
        }  catch (SQLException e) {
            message += " - Fehler beim Schliessen des Statement: "
        + e.getMessage();
        }
        releaseConnection();
        if (message.length() > 0) {
            throw new Exception(message);
        } 
    }
  }
 

velaluka

Aktives Mitglied
Hallo,
könnte es reichen wenn du zeile 24 und 25 tauscht. Du schließt erst das PStatement und nicht erst das RS.....
Ciao velaluka
 

thE_29

Top Contributor
Desweiteren (wenn du Oracle nutzt), hilft dir ein rs.close NICHTS!!!! (könnte bei anderen DBs auch sein).

Man muss alle ResultSet´s abarbeiten! Dh, man macht sich einmal wo ne statische Methode welche sowas macht

Java:
public static void close(ResultSet rs)
{
  try{
     if(rs != null) //loopt es bis zum ende
       while(rs.next());
   }catch(Exception ex){}
  try{
      rs.close();
   }catch(Exception ex){}
}[/Java]

Man sollte als bei select Befehlen wo man nur die erste Zeile abfragt, kein Abfragen machen wo riesige Datenmengen kommen können...
 

ARadauer

Top Contributor
du überschreibst dir in zeile 17 prepStmt aus zeile 12.
Wenn du nun ein close auf prepStmt machst schließt du das Stament aus Zeile 17, das aus Zeile 12 müsste noch immer offen sein... weiß nicht ob das was damit zu tun hast aber das könnest du mal schließen.. vielleicht hilfts...
 

alonzogonzo

Mitglied
@velaluka
Das tauschen der Zeilen hat nichts gebracht. Es scheint so als ob es keine Rolle spielt was zuerst geschlossen wird.

@ARadauer
Dein Tipp brachte die Lösung. Hab gar nicht daran gedacht, das erste Statement zu schliessen. Seit ich dieses direkt nach dem Ausführen schliesse, hat Oracle keine Probleme mehr mit den Cursors.

@thE_29
Den Hinweis werde ich beherzigen und das Schliessen in eine statische Methode bauen.

Danke euch für eure Hilfe.

Grüsse
Phil
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Maximale Anzahl offener Cursor überschritten Datenbankprogrammierung 5
E Maximale Anzahl offener Cursor Datenbankprogrammierung 9
A Maximale Anzahl offener Cursor erreicht Datenbankprogrammierung 3
J Maximale Anzahl von char in SQL Datenbankprogrammierung 11
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
G maximale Einträge in HSQLDB Datenbankprogrammierung 7
M Maximale Kapazität von Datenbanken Datenbankprogrammierung 2
G maximale Länge von Spalten ermitteln Datenbankprogrammierung 3
ruutaiokwu Duplikate auf bestimmte Anzahl begrenzen Datenbankprogrammierung 8
C PostgreSQL Anzahl der Spalten ermitteln Datenbankprogrammierung 2
OnDemand SQL Query Anzahl der Werte Datenbankprogrammierung 8
Kandum MySQL Anzahl gefundener Datensätze bleibt gleich, auch wenn mehr existieren und ausgegeben werden Datenbankprogrammierung 3
S Anzahl Datensätze in db4o Datenbankprogrammierung 2
N Prepared Statement mit unbekannter Anzahl von Where-Clauses Datenbankprogrammierung 30
B Die Anzahl der Datensaetze einer Datenbank anzeigen Datenbankprogrammierung 2
Guybrush Threepwood H2: Anzahl an Usern begrenzen Datenbankprogrammierung 2
I MySQL - Anzahl Tabellen heraus finden Datenbankprogrammierung 6
I Anzahl unterschiedlicher Datensätze ausgeben Datenbankprogrammierung 2
D Anzahl der Elemente im ResultSet ermitteln Datenbankprogrammierung 8
W Anzahl der Spalten eines ResultSets bestimmen Datenbankprogrammierung 5
Z Zeilen-Anzahl abfragen bei Datenbank Datenbankprogrammierung 4
G Anzahl der Datensaetze abfragen Datenbankprogrammierung 11
rambozola große anzahl an inserts bei oracle db unperformant Datenbankprogrammierung 15
S Anzahl geänderte Records Datenbankprogrammierung 2
V Anzahl der Datensätze abfragen Datenbankprogrammierung 9
B PreparedStatement - anzahl ParameterValues Datenbankprogrammierung 6
M Anzahl der Tabellen herausfinden Datenbankprogrammierung 6
M begrenzte anzahl von resultsets pro connection?? Datenbankprogrammierung 6
D Anzahl der zurückgelieferten Datensätze Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben