Db4o Delete Problem

kjube

Mitglied
Hey...
Ich hab ne Klasse Spieler mit String foo und String foo2. foo ist quasi Primärschlüssel, wenn der deleted wird, soll foo2 auch gelöscht werden. Irgendwie finde ich den Fehler allerdings nicht. Hoffe jemand kann mir helfen.

Java:
public class SpielerLoeschen {
	
	public void loeschen(String name){
		EmbeddedConfiguration configuration = Db4oEmbedded.newConfiguration();
		configuration.common().objectClass(Spieler.class).cascadeOnDelete(true);
		ObjectContainer db = Db4oEmbedded.openFile("C:/Test/test.yap");
		try {
			ObjectSet<Spieler> result = db.queryByExample(name);
			Spieler spieler = result.next();
			db.delete(spieler);
			
		} catch (DatabaseFileLockedException e) {
			System.out.println(e.getMessage());
		}
		finally{
			db.close();
		}
	}
}


public class loeschen {

	public static void main(String[] args) {
		String name = "Torres";
		SpielerLoeschen loescheSpieler = new SpielerLoeschen();
		loescheSpieler.loeschen(name);
	}
}

Exception in thread "main" java.lang.IllegalStateException
at com.db4o.foundation.Iterable4Adaptor.next(Iterable4Adaptor.java:35)
at com.db4o.internal.query.result.StatefulQueryResult.next(StatefulQueryResult.java:48)
at com.db4o.internal.query.ObjectSetFacade.next(ObjectSetFacade.java:64)
at SpielerLoeschen.loeschen(SpielerLoeschen.java:25)
at loeschen.main(loeschen.java:10)
 
S

SlaterB

Gast
der Fehlermeldung nach wird das Programm schon beim next() beendet,
da es in der main-Methode beginnt und keine Schleifen vorhanden sind,
kann es auch nicht an Nebenwirkungen durch ein vorheriges delete() im gleichen Programm geben,

würdest du die delete()-Zeile, die nie drankommt, löschen, müsste das Programm doch genauso zum Fehler laufen,
stimmts?

wenn dann also im ganzen Programm delete() keine Rolle spielt, was läßt dich vermuten dass es ein delete-Problem ist?
kann es sein dass 'Torres' einfach nicht vorhanden ist?
 

kjube

Mitglied
In der DB ist er.

torresaa.jpg


Liegt also irgendwie an der Syntax:

Java:
Spieler spieler = result.next();

Irgendwelche Ideen? Die Dokumentation von db4o ist aber auch n crap... :E
 
S

SlaterB

Gast
hast du je mit
> db.queryByExample(String);
erfolgreich einen Spieler geladen?
wenn nicht ist es nochmal ziemlich gewagt gleichzeitig delete() einzubauen und sich zu wundern dass alles zusammen nicht geht

was passiert wenn du zwei Klassen hast und mal den Namen eines Spielers, mal eines z.B. Autos hast und beide laden willst,
ist allein über die Konfiguration festgelegt, dass queryByExample(String) im Moment gerade auf Spieler gehen soll?

allgemein kenne ich queryByExample() so, dass man als 'Example' auch ein Dummy-Spieler-Objekt mit gesetzten Namen übergibt,
dann weiß das Framework dadurch, dass es um die Spieler-Klasse geht und lädt alle Objekte mit gleichen Attributen,
also mit dem gesuchten Namen

das erste gefunden Beispiel
Object-Specific Activation
mit
> db.QueryByExample(new SensorPanel(1));
unterstützt meine Vermutung (sonst hätte ich sie vor den Posten auch vielleicht geändert ;) )

ebenso die API
db4o - database for objects - documentation

[..]
queryByExample() creates an ObjectSet containing all objects in the ObjectContainer that match the passed template object.
[..]
Query Evaluation
All non-null members of the template object are compared against all stored objects of the same class. Primitive type members are ignored if they are 0 or false respectively.
[..]
 

kjube

Mitglied
Das ist nur sone Art TestCase für mich zum üben. Erstmal egal ob es 2 Torres gibt und ich mit delte beide lösche. Ich habe es mittlerweile hingekriegt, dass er Index 0 löscht, bin aber zu blöd den Dummy mit einem übergebenen String zu vergleichen.
Hilf mir SlaterB. ( :
Habe mit QBE schon andere Operationen hingekriegt, von daher war ich mir eigentlich sicher, alles richtig geladen zu haben. :D
 
S

SlaterB

Gast
ein Spieler-Objekt erzeugen und darin den Namen setzen, wie gesagt,
falls deine Frage ist wie du mit queryByExample() alle Torres laden kannst
 

pl4gu33

Top Contributor
sry ich wollte ihn noch editieren ich hab dir gerade nen Beispiel schnell runterprogrammiert :D
hoffe das reicht dir um es zu verstehen ? :D

Code:
configuration.common().objectClass(Spieler.class).cascadeOnDelete(true);

brauchst du bei Strings nicht. Weil "only primitive and String members" werden mit der Default- Einstellung geupdatet / gelöscht

das bräuchtest du nur, wenn z.b. Spieler auf nen Objekt "Mannschaft" verweist und das dann auch gelöscht werden muss, oder geupdatet werden muss.

Java:
import com.db4o.Db4oEmbedded;
import com.db4o.ObjectContainer;
import com.db4o.ObjectSet;
import com.db4o.config.EmbeddedConfiguration;
import com.db4o.ext.DatabaseFileLockedException;

public class SpielerConf {
	
	public static void erstellen(ObjectContainer db,String name){
		db.store(new Spieler(name));
	}
	
	public static void read(ObjectContainer db){
		ObjectSet<Spieler> result = db.queryByExample(new Spieler(null));
        for(int i=0;i<result.size();i++){        	
        	System.out.println(result.get(i).getName());
        }
       
	}
    
    public static void loeschen(ObjectContainer db,String name){
		ObjectSet<Spieler> result = db.queryByExample(new Spieler(name));
        for(int i=0;i<result.size();i++){        	
        	db.delete(result.get(i));
        }
    }

    private static void deleteAll(ObjectContainer db) {
		// TODO Auto-generated method stub
    	ObjectSet<Spieler> result = db.queryByExample(new Object());
        for(int i=0;i<result.size();i++){        	
        	db.delete(result.get(i));
        }
	}
 

 
    public static void main(String[] args) {  
    	ObjectContainer db = null;
    	try {
         db = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(),"test.yap");
    	 SpielerConf.erstellen(db, "Torres");
    	 SpielerConf.erstellen(db, "Gomez");
    	 SpielerConf.read(db);
    	 SpielerConf.loeschen(db,"Torres");
    	 SpielerConf.read(db);
    	 SpielerConf.deleteAll(db);
    	}catch(Exception e){
    		e.printStackTrace();
    	} finally{
              db.close();
        }
    }

	
}

Java:
public class Spieler {
	private String name;
	private int zahl;
	
	public Spieler(String n){
		name=n;
		zahl=100;
	}
	
	public String getName(){
		return name;
	}
	
	public int getZahl(){
		return zahl;
	}
	
	
}
 
Zuletzt bearbeitet:

kjube

Mitglied
Danke, genau sowas habe ich gebraucht. Ich poste mal lieber nicht den Rest meines Quellcodes... Hab deine Funktionen alle wesentlich umständlicher programmiert. ( :

Was genau macht: "db.queryByExample(new Spieler(null));"
 
Zuletzt bearbeitet:

pl4gu33

Top Contributor
Danke, genau sowas habe ich gebraucht. Ich poste mal lieber nicht den Rest meines Quellcodes... Hab deine Funktionen alle wesentlich umständlicher programmiert. ( :

Was genau macht: "db.queryByExample(new Spieler(null));" und
ObjectContainer db = null; (Main) ist quasi meine .yap datei?


ObjectContainer db = null; muss oben initalisiert sein, damit Finally die Variable auch kennt, kann man auch noch anders machen.


Code:
db.queryByExample(new Spieler(null))
null ist in diesem Fall ein "Defaultwert" d.h. wenn man z.b. keinen Namen angeben möchte, und es werden dann alle Spieler ausgegeben
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S db4o Datenbankprogrammierung 0
D DB4O in Tomcat Datenbankprogrammierung 2
C Db4o speichert verschachtelte Objekte nicht vollständig Datenbankprogrammierung 8
F db4o - Zuweisungsproblem! Datenbankprogrammierung 2
P DB4o Attribute hinzufügen Datenbankprogrammierung 5
S Anzahl Datensätze in db4o Datenbankprogrammierung 2
S db4o vs. H2 - Meinungen erbeten Datenbankprogrammierung 6
F [DB4O] Objekte sollen sich nicht verändern Datenbankprogrammierung 5
A db4o - Datenbank auf USB-stick Datenbankprogrammierung 3
R db4o und Performance Datenbankprogrammierung 5
S CrudRepository bulk delete Datenbankprogrammierung 2
E Was bedeutet die Konsistenzbedingung "ON DELETE RESTRICT"? Datenbankprogrammierung 6
A Eclipse + Derby + Delete Row Datenbankprogrammierung 3
K Tabellenübegreifendes DELETE möglich? Datenbankprogrammierung 5
alex_fairytail MySQL SQL Statement Delete zwischen Datum1 und Datum2 Datenbankprogrammierung 5
S HSQLDB DELETE-Statement funktioniert nicht Datenbankprogrammierung 4
M Mysql Delete ohne Where Klausel untersagen Datenbankprogrammierung 8
T DB2 delete/update über 2 Tabellen Datenbankprogrammierung 2
M DELETE FROM via Java Datenbankprogrammierung 7
V Delete From Tabelle, ohne vorher die Tabelle zu kennen Datenbankprogrammierung 5
Z DELETE-Statement Datenbankprogrammierung 6
C delete Datenbankprogrammierung 8
-MacNuke- Hibernate Bi-Directional delete Datenbankprogrammierung 3
B MySql DELETE Anweisung gibt Fehler zurück Datenbankprogrammierung 7
D Delete Befehl will irgendwie nicht Datenbankprogrammierung 8
D Brauche hilfe bei Delete mit Datum! Datenbankprogrammierung 4
A delete aus datenbank, funktioniert nicht so richtig Datenbankprogrammierung 10
G Problem mit Delete-Statement Datenbankprogrammierung 3
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
C Problem mit Apache Poi Datenbankprogrammierung 6
N HSQLDB Problem mit Eclipselink in runnable Jar Datenbankprogrammierung 10
P GroupLayout-Problem Datenbankprogrammierung 12
F XAMPP max connections problem Datenbankprogrammierung 6
C MySQL Problem in phpMyAdmin Oberfläche Datenbankprogrammierung 5
C Problem with INSERT.............ON DUPLICATE KEY Datenbankprogrammierung 3
C Problem with insertion in database. Datenbankprogrammierung 7
F Problem mit Hibernate c3p0 Datenbankprogrammierung 2
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
A kleines Problem Datenbankprogrammierung 6
T Problem mit Datenbankverbindung Datenbankprogrammierung 22
V Derby/JavaDB updateRow Problem Datenbankprogrammierung 0
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
Nuiton EmbeddedDriver Problem Datenbankprogrammierung 6
A MongoDB Passwort Problem Datenbankprogrammierung 0
O HSQLDB Hibernate Criteria Problem Datenbankprogrammierung 3
F MySQL JDBC Problem Datenbankprogrammierung 5
Anfänger2011 Datenbankstruktur/aufbau (theoretisches Problem) Datenbankprogrammierung 5
M Derby/JavaDB Drop Database problem Datenbankprogrammierung 3
M Derby/JavaDB NOT LIKE problem Datenbankprogrammierung 19
N HSQLDB Problem mit EntityManager Datenbankprogrammierung 7
B MySQL JPAContainer Problem Datenbankprogrammierung 4
K Eclipse Apache Derby Treiber Problem Datenbankprogrammierung 4
C Problem oder Denkfehler mit H2-Database Datenbankprogrammierung 3
E Wie kann man das Problem mit der BLOB-Spalte lösen? Datenbankprogrammierung 1
M Problem mit jcouchdb und CouchDB - UTF8 kein gültiger Zeichentyp Datenbankprogrammierung 4
T MySQL Problem mit Datenbankanbindung Datenbankprogrammierung 4
M INSERT-Problem = integrity constraint violation: foreign key no parent Datenbankprogrammierung 5
P SQL Query Problem Datenbankprogrammierung 14
A MySQL Problem bei Tabelle ausgeben Datenbankprogrammierung 3
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
B SQLite Problem bei Planung der Datenbank [Jeopardy] Datenbankprogrammierung 3
A Problem mit dem Import und Export von Bildern Datenbankprogrammierung 4
P Oracle Problem mit Umlauten Datenbankprogrammierung 9
A Problem mit Create-Statement Datenbankprogrammierung 9
D Problem mit COLUMN_IDENTIFIERS Datenbankprogrammierung 8
Bluedaishi MySQL Abfrage Problem :-) Datenbankprogrammierung 21
M Problem mit mehreren Datasourcen Datenbankprogrammierung 3
R Resultset.last() Problem Datenbankprogrammierung 12
M Problem GroupBy Datenbankprogrammierung 3
S CURRENT_DATE problem Datenbankprogrammierung 2
M Problem mt JPA Id-Generators Datenbankprogrammierung 18
Gossi Oracle Problem mit group by... Datenbankprogrammierung 22
M MySQL SQL Abfrage Problem Datenbankprogrammierung 6
R MS-SQL Express Login-Problem Datenbankprogrammierung 8
P Lazy-Fetchig und Session-Problem mit Hibernate Datenbankprogrammierung 4
N HSQLDB Problem beim Treiberladen im Jar Datenbankprogrammierung 6
M Problem beim Erstellen einer Query Datenbankprogrammierung 7
C Hibernate ManyToMany zusammengesetzter Primärschlüssel, problem. Datenbankprogrammierung 3
M Problem mit HQL Syntax Datenbankprogrammierung 5
Mike90 Deadlock/Lock Problem Datenbankprogrammierung 4
T Access 32bit on Win7 64Bit ODBC Problem Datenbankprogrammierung 1
C unverständliches DB Problem (Es ist kein temporärer Systemtabellenbereich mit einer ausreichenden..) Datenbankprogrammierung 5
S ODBC Treiber Problem/oder unvermögen Datenbankprogrammierung 18
J Problem bei Boolean in PreparedStatement Datenbankprogrammierung 5
C MySQL Problem mit UPDATE Abfrage Datenbankprogrammierung 13
C Problem mit SQL-Abfrage Datenbankprogrammierung 5
K Problem mit Datenbankverbindung via Eclipse Datenbankprogrammierung 2
A Problem mit Eintragen von Daten in eine Datenbank mittels DAO Datenbankprogrammierung 4
S Oracle Problem mit PreparedStatement.setString(1,"str") Datenbankprogrammierung 10
B MySQL Problem mit Datenbankanbindung an MySQL Datenbankprogrammierung 2
N Problem bei Erstellung eines Index Datenbankprogrammierung 12
C Hibernate Property-Problem Datenbankprogrammierung 5
J MyBatis - Update Problem Datenbankprogrammierung 4
S JPA: Problem mit Update von Daten Datenbankprogrammierung 7
c_sidi90 Hibernate Problem Table doesnt excist Datenbankprogrammierung 8
M Problem mit JPA - OneToMany-Relation Datenbankprogrammierung 3
I Hibernate: Composite Foreign Key Problem Datenbankprogrammierung 14
S JPA OptimisticLocking Problem Datenbankprogrammierung 11
I Derby/JavaDB Problem mit Befüllung von Tabelle Datenbankprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben