Interserver was unable to complete an io request

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Guten Tag,

Verwende Interbase 6.5!
Ich habe einen einfachen Code:
Code:
      stmt =  con.createStatement();      
      rs = stmt.executeQuery(select);

Dieser Code wird in einer Schleife beim Initialisieren oft durchlaufen! Bei etwa 8 von 10 Durchläufen erhalte ich die Exception - "Interserver was unable to complete an io request". Das veranlasst mich anzunehmen, dass der JDBC - Treiber mit der Abarbeitung des Codes nicht zu Rande kommt. Deshalb möchte ich zwischen der Statement-Zeile und der Result-Zeile ein "Wait" einbauen.

Wie geht das?

Danke
 
G

Guest

Gast
Nein mache ich nicht. Brauche ich auch nicht - denke ich.
Weil:

Code:
  private void createBaum() {
    String query = null;
    for (int i = 0; i < baum.length; i++) {
      rs = null;
      query = "select baumbez from wald where baumbez = 'Eiche';
      rs = DB.abfrage(query);
      try {
        if (!rs.next()) {
          String insert = null;
          insert = "insert into wald(.....)";
          DB.eintrag(insert);
        }
      }
      catch (SQLException ex) {
        ex.printStackTrace();
      }
    }
  }

  //In der KLasse DB
  public synchronized ResultSet abfrage(String select) {
    try {
      stmt = null;
      stmt =  con.createStatement();
      rs = stmt.executeQuery(select);
    }
    catch (SQLException ex) {
      ex.printStackTrace();
    }
    return rs;
  }

Ich schliesse also das ResultSet nicht, aber ich setze er null.
 

Bleiglanz

Gesperrter Benutzer
na dann machs halt nicht

-> durchs nullen wird die Verbindung auf jeden Fall nicht geschlossen, reine Resourcenverschwendung
 
G

Guest

Gast
Kann man sehen wie man will. Ich habe ja nur dieses eine ResultSet. Das heißt, wenn ich etwas abfragen will, dann muss ich mich zwangläufig dieser einen Methode bedienen (deswegen synchronized).
Das war aber nicht meine Frage.

Meine Frage war, ob und wie ich eine Art temporären Stop einbauen kann.
 
G

Guest

Gast
nein!
ich denke ich überschreibe das Statement - Objekt. Immerhin habe ich die Variable stmt als KLassenvariable angelegt. Daher meine ich, dass bei jedem Aufruf von stmt..... das alte Objekt kurzer Hand überschrieben wird.

Das synchronized ist gar nicht so witzlos. Ob es schlau ist oder nicht, so verwende ich die Methode Abfrage von mehreren Threads aus als einzige, sobald ich auf die DB zugreifen muss.

Eine Connection mache ich auch nur eine einzige auf, die zur geamten Laufzeit geöffnet bleibt. Es ist nicht möglich aufgrund der Geschwindigkeit des JDBC Treibers jede Abfrage und jeden Eintrag zu öffenen und zu schliessen.

Ich versuche nur das bestmögliche aus dem mir gegebenen herauszuholen und ich denke der eingeschlagene Weg ist wahrscheinlich nicht der feinste aber auf jeden Fall der einzig machbare.
 

Bleiglanz

Gesperrter Benutzer
Connection global ist OK

aber ein ResultSet musst du closen sobald du es nicht mehr brauchst, da führt kein weg dran vorbei
 
G

Guest

Gast
Glaub ich nicht.

Das ResultSet, dass ich in der Methode abfrage anlege wird ohnehin immer überschrieben. Und in der Methode wo ich das ResultSet hin (natürlich wieder auf ein ResultSet) übergebe kann ich es closen - da geb ich dir recht. Habe ich auch schon gemacht. Nur bekomme ich die Exception trotzdem nicht weg, womit ich wieder am Anfang meiner Frage wäre.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben