Hallo Leute, bin ein Neuling auf dem Gebiet db4o und stosse sogleich auf einige Probleme. Wenn ich eine Session öffne und in dieser Daten in die db4o Datenbank rein schreibe und wieder auslese, alles kein Problem. Wenn ich dann allerdings zum schreiben die db öffne und danach schliesse und zum lesen sie nochmal neu öffne, bekomme ich immer exceptions geschmissen. Ich denke mal, dass es daran liegen wird das die Daten während einer Session wohl noch im Java-Speicher liegen und noch nicht in die Datenbank eingetragen wurden.
Hier mal ne Beispielklasse zu meinem Problem:
import java.io.File;
import java.util.*;
import com.db4o.*;
import com.db4o.query.*;
import com.db4o.ext.DatabaseFileLockedException;
class example{
Datenbank db = null;
public example(){
try{
db = new Datenbank();
/* schreibe irgendetwas in die Datenbank*/
Punkt o = new Punkt(0,0,0);
Punkt p = new Punkt(0,0,0);
Punkt q = new Punkt(0,0,0);
db.oc.store(o);
db.oc.store(p);
db.oc.store(q);
db.oc.commit();
}catch(Exception e){
e.printStackTrace();
}finally{
db.close();
}
/* Datenbank erneut öffnen und Daten auslesen, bzw ändern, etc.*/
try{
db = new Datenbank();
/* lese alle Punkt Objekte aus der Datenbank*/
Punkt proto = new Punkt(0,0,0);
ArrayList<Punkt> f = new ArrayList<Punkt>();
ObjectSet <Punkt> result=db.oc.queryByExample(proto);
while(result.hasNext()){
proto = result.next();
f.add(proto);
}
}catch(Exception e){
e.printStackTrace();
}finally{
db.close();
db.delete();
}
}
public static void main(String[]tanga){
new example();
}
}
class Datenbank{
public ObjectContainer oc = null;
public Datenbank(){
try{
oc = Db4o.openFile("Kommune.db");
System.out.println("database-connection initiated");
} catch(DatabaseFileLockedException e) {
e.printStackTrace();
}
}
public void close(){
if (oc != null){
System.out.println("database-connection closed");
oc.commit();
oc.close();
}
}
public void delete(){
new File("Kommune.db").delete();
System.out.println("database deleted...");
}
}
class Punkt {
public int x,y,z;
Punkt(int xx, int yy, int zz) {
x=xx; y=yy; z =zz;
}
Punkt(Punkt p2) {
x=p2.x; y=p2.y; z=p2.z;
}
public String toString(){
return "x="+x+",y="+y+",z="+z;
}
double distanz_2 (Punkt p2) {
final double dx = x - p2.x;
final double dy = y - p2.y;
return Math.sqrt(dx*dx + dy*dy);
}
}