# Problem mit der Datenbank Access in meinem Java-Programm



## jorgeHX (4. September 2004)

Hallo zusammen,
ich habe ein großes Problem mit meiner Datenbank MS-Access.

Folgendes Szenario: 
Ich schreibe aus meinem Javaprogramm an einer Stelle sehr oft hintereinander Datensätze in ein und dieselbe Access-Tabelle.

Meine Klasse SpielDAO enthält verschiedene Methoden, um Datensätze in der Tabelle Spiel zu aktualisieren.
Ich erzeuge nun an einer Stelle mehrere Objekte der Klasse SpielDAO und schreibe hintereinander Datensätze in die Tabelle. 

Auf einmal erscheint dann folgende Fehlermeldung:


```
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Aktualisieren nicht möglich; momentane Sperrung durch Benutzer 'admin' auf Computer 'JP-TOWER'. DB_Connection z:89
```

Ist Access zu langsam, um die Daten hineinzuschreiben? 
Bitte helft mir, ich bin super am Verzweifeln. Wie kann ich denn diesen Fehler umgehen oder korrigieren


----------



## Thomas Darimont (4. September 2004)

Hallo!

Wie in der Fehlermeldung geschrieben wurde der jeweilige Datensatz durch den Benutzer XYZ zur Beabreitung gesperrt Du kannst bei der Erzeugung des Statement-Objektes aber das Lockingverhalten mitgeben:
CONCUR_UPDATABLE
etc...
siehe javaDoc @ java.sql.ResultSet

Gruß Tom


----------



## jorgeHX (5. September 2004)

Moin Thom,
noch ne Frage:
Ich ändere also meine alte Anfrage:


```
ResultSet res = Frame.db.query("SELECT nTSID FROM nimmtTeilSpiel WHERE("
                                  + "PersonID =" + personDAO.getKey() +
                                  " AND SpieltagID=" +
                                  spieltagDAO.getKey() + ")");
```

in den folgenden Code, oder?


```
Statement stmt = con.createStatement(
                                      ResultSet.TYPE_SCROLL_INSENSITIVE,
                                      ResultSet.CONCUR_UPDATABLE);

   
ResultSet res = stmt.executeQuery("SELECT nTSID FROM nimmtTeilSpiel WHERE("
                                  + "PersonID =" + personDAO.getKey() +
                                  " AND SpieltagID=" +
                                  spieltagDAO.getKey() + ")");
```

Wie initalisiere ich denn dieses Connection-Objekt con?


----------



## jorgeHX (5. September 2004)

Nochmal ich,
also die Connection hab ich.

Allerdings verschwindet die Fehlermeldung auch nach der oben stehenden Veränderung nicht :-(

Ich bin echt am Verzweifeln..
Danke


----------



## jorgeHX (5. September 2004)

Muss ich vielleicht auch was am Update ändern?
Das sieht bei mir im Moment so aus:


```
public void setAusEinwechselung(long wechselID, String wechsel) throws SQLException,
      DBException {
    //now update the record
    update("UPDATE nimmtTeilSpiel SET AuswechselID=" + wechselID + ", Einwechslung='"+wechsel+"' "+
           " WHERE nTSID=" + key);
  } //setAuswechselID


public int update(String statement)
          throws SQLException, DBException{
              //System.out.println("in Update");
              open();
              Statement stm= null;
              try {
                      stm = con.createStatement();

                     //do the update
                      int res = stm.executeUpdate(statement);
                      return res;

              } catch (SQLException e) {
                e.printStackTrace();
                   System.out.println(e.toString()+" DB_Connection z:89");
                }
              return -1;
      }
```

Danke für die Hilfe


----------



## jorgeHX (5. September 2004)

Nachdem ich meine Blockade im Kopf überwunden habe, ist mir auch der dumme Fehler aufgefallen...

Die Methode open() hat immerwieder eine neue Connection aufgebaut.
Jetzt nicht mehr 

Brauch ich deinen Code dennoch Tom?


----------



## Thomas Darimont (5. September 2004)

Hallo!

Dein Fehler war wohl wie du schon selbst beschrieben hast, dass du für jedes Update Statement eine neue Verbindung geöffnet hast diese aber danach nicht direkt geschlossen hast. Nun hast du praktisch für jede Verbindung eine eigene "Session" offen die sich dann gegenseitig auf die Füße getreten sind. Wenn du das alles mit nur einer verbindung machst dürfte es keine Probleme geben. Das Concur Update setzt man normalerweise wenn man über ein Resultset laufen und gleichzeitig Änderungen durchführen will.

Gruß Tom


----------

