Java schneller als Access

jean luc

Mitglied
Hallo,
ich schreibe einige Daten in eine Access Datenbank.
In einem Programmfenster kann ich die Daten dann bearbeiten und abspeichern.
Auf Basis dieser Änderungen wird ein JTree geändert.
Mein Problem ist nun, dass immer die alten Daten wieder in den JTree geschrieben werden. Die Daten werden aber korrekt gespeichert, was auch bei einem erneuten Programmstart deutlich wird.
Auf einem langsamen Computer funktioniert die Aktualisierung des Baumes gut.
Meine Vermutung ist deshalb, dass der Programmcode zu schnell abläuft und die Daten gelesen werden bevor Access sie schreibt.
Gibt es die Möglichkeit den Code und die Access DB zu synchronisieren?

Gruß Simon
 
Zeig doch mal den Code. Normalerweise solltest du die Datenbank aber mit einem SQL-Statement aktualisieren. Dann läuft die Anwendung erst weiter, wenn die Anweisungen ausgeführt worden sind.
 
Hallo,
das ist leider nicht so einfach, da das Programm sehr komplex ist und der Code über mehrere Klassen und Methoden verteilt ist. Aber das wesentliche sollte es hier sein.
Ich habe das Problem auch erst bemerkt als ich es auf dem schnellen PC meines Kumpels ausprobiert habe.
Bei mir geht es, habe aber auch nur ne 500MHZ Kiste.

public ResultSet query (String statement) throws SQLException, DBException{

try {
stm = con.createStatement();
//do the query
ResultSet res = stm.executeQuery(statement);

return res;

} catch (SQLException e) {

//close any open connections and throw new error to calling method
if (stm!=null)
try{stm.close();}
catch (SQLException eatit) {};
}
return null;
}



public void setLastName( String s )
throws SQLException, DBException {

//now check if password is valid
if (s==null || s.length()==0 )
throw new DBException( DBException.ET_INTEGRITY_VIOLATION,
"Ein Nachname muss eingegeben werden!");

//update the record
update( "UPDATE Person SET Name='"+filter(s)+"' WHERE PersonID="+key );

} // setLastName
 
sorry noch was vergessen

public String getLastName()
throws SQLException, DBException {

//check if db record still exists
validate("Person","PersonID");


ResultSet res = query("SELECT Name FROM Person WHERE PersonID="+key);

res.next();
String lname = res.getString("Name");
res.getStatement().close();
//res.close();
return lname;

} // getLastName


Wenn ich das Programm warten lasse:

int time = 4000;
Thread.sleep(time);

geht es. Aber das ist nicht unbedingt eine gute Lösung, da ich viele Abfragen mache und nicht ständig so lange warten will.

Gruß Simon
 
Hallo,
ich habe die Datenbank folgendermaßen angebunden:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("jdbc:eek:dbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=VBDB.mdb");

Was könnte ich da tun, wenn das Problem da liegen sollte?

Gruß
Simon
 
Es kann sein das die Bridge JDBC - ODBC zu langsam ist, weil
neben JDBC auch noch ODBC die Daten weitertransferieren muss.

Eventuell findest du einen richtigen JDBC Treiber für Access.

mal auf java.sun.com nach JDBC Driver suchen da gibt es eine List mit Treibern.,
 
Zurück