IllegalStateException bei Datenbankzugriff

E99

Aktives Mitglied
Hallo!
Ich benutze eine objektorientierte Db.

Beim Zugriff darauf bekomme ich eine IllegalStateException! Soetwas hatte ich noch nie. Meine Recherchen haben mich aber nicht wiklich weitergebracht!

Java:
public void removeStock(Stock stock) {
	  db.delete(stock);

Java:
public void delete(Stock stock){
		this.stock = stock;
		
		ObjectContainer db = Db4o.openFile("StockTest.db");
		ObjectSet result = db.queryByExample(stock);

		Stock found = (Stock) result.next();
		db.delete(found);
		db.commit();
		db.close();
		
	}

Java:
Exception in thread "AWT-EventQueue-0" 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 lib.Database.delete(Database.java:71)
	at stocks.Stocklist.removeStock(Stocklist.java:48)
	at ui.AppPanel.delete(AppPanel.java:109)
	at ui.StockPanel$2.actionPerformed(StockPanel.java:190)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$200(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
 
C

Camino

Gast
Hallo!
Ich benutze eine objektorientierte Db.

Beim Zugriff darauf bekomme ich eine IllegalStateException! Soetwas hatte ich noch nie. Meine Recherchen haben mich aber nicht wiklich weitergebracht!

Das finde ich dazu:

Signalisiert, dass eine Methode zu einem unpassenden Zeitpunkt aufgerufen wurde. In anderen Worten, die Java Umgebung oder Java Applikation sich nicht in einem passenden Zustand für den angeforderten Arbeitsschritt befindet.

The root cause of IllegalStateException exception is a java servlet is attempting to write to the output stream (response) after the response has been committed.

It is always better to ensure that no content is added to the response after the forward or redirect is done to avoid IllegalStateException. It can be done by including a ‘return’ statement immediately next to the forward or redirect statement.
 
N

nillehammer

Gast
Kenne db4O nicht, könne mir aber vorstellen, dass
Code:
ObjectSet result = db.queryByExample(stock);
zu einem leeren Ergebnis führt und deswegen der Aufruf von next() verboten ist. Überprüfen kannst Du das mit hasNext() oder size() > 0;
 

E99

Aktives Mitglied
Ja es war tatsächlich die leere Ergebnismenge. Doch beim Anfangen kommt nun eine DatabaseFileClosedException. Die soll wohl dann geworfen werden, wenn mehr als eine Instanz auf die Datenbankdatei zugreifen.

Allerdings schließe ich nach jeder Abfrage die Db und habe nur einen Thread.

Wie kann das sein?
 

Ähnliche Java Themen

Neue Themen


Oben