# DB- Connection lösen



## Plumperquatsch (26. Jan 2009)

Hallo Allerseits,

ich öffne eine DB- Verbindung:



```
private EntityManagerFactory emf;
private EntityManager em;
private Connection connection;
...
this.setDataDirectory(ApplicationInfo.getInstance().getDataDirectory());
this.dataBase = db;
Map<String,String> map = new HashMap();
map.put("toplink.jdbc.url", this.protocol + dataDirectory+dataBase);

emf = Persistence.createEntityManagerFactory("TimeControlPU", map);
try {
  em = emf.createEntityManager();
  connection = DriverManager.getConnection(protocol + this.dataDirectory + this.dataBase);
} catch (Exception e) {
  this.createDataBase();
  if (this.actualStatus == DBState.NOSERVER){
    ....
  }
}
else {
  map.put("toplink.ddl-generation", "create-tables");
  emf = Persistence.createEntityManagerFactory("TimeControlPU", map);
  em = emf.createEntityManager();
}
actualStatus = DBState.CONNECTED;
```

Das funktioniert auch, kann ich wunderbar nutzen.

Jetzt möchte ich die Verbindung schließen:

```
emf.close();
try {
  connection.close();
  this.actualStatus = DBState.NOT_CONNECTED;
} catch (SQLException ex) {
  Logger.getLogger(DBConnector.class.getName()).log(Level.SEVERE, null, ex);
}
```
Ich möchte erreichen, dass ich die DB- Dateien jetzt verschieben kann, also dass die DB- Verbindung nicht mehr besteht. Leider ist dies nach diesen Aufrufen nicht möglich. Kann mir jemand sagen, was ich vergessen habe? Ich dachte mit dem 
	
	
	
	





```
connection.close();
```
 hätte es sich erledigt.


----------



## SlaterB (26. Jan 2009)

> also dass die DB- Verbindung nicht mehr besteht. Leider ist dies nach diesen Aufrufen nicht möglich.

wie stellst du fest, dass irgendwas nicht mehr besteht?


----------



## Plumperquatsch (26. Jan 2009)

ich versuche in meinem DB- Nutzenden Programm eine Query über 

```
Query q = em.createQuery(" ... ");
```
aufzubauen. Das schlägt fehl:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Attempting to execute an operation on a closed EntityManager.
        at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerImpl.verifyOpen(EntityManagerImpl.java:594)
        at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl.createQuery(EntityManagerImpl.java:198)


----------



## maki (26. Jan 2009)

> Ich möchte erreichen, dass ich die DB- Dateien jetzt verschieben kann, also dass die DB- Verbindung nicht mehr besteht.


Wahrscheinlich läuft die DB noch im Hintergrund, wleche ist es denn?


----------



## SlaterB (26. Jan 2009)

@Plumperquatsch

die Exception klingt doch sehr danach, dass die 'DB- Verbindung nicht mehr besteht',
war doch genau dein Ziel?


----------



## Plumperquatsch (26. Jan 2009)

@maki: Ist die Derby Embedded. Stimmt, vieleicht ist das so, das die noch läuft. Das kann sein. Denn...

@SlaterB: ...ich kann das Verzeichnis trotz der Exception nicht verschieben. Es wird gemeldet, dass db noch von irgendeinem Programm genutzt wird.

Kann mir jemand sagen, wie ich die DB wieder stoppen kann? Ich bin mir jetzt nicht bewußt, dass ich die explizit starte. 

Ich danke Euch für die schnellen Antworten!


----------



## SlaterB (26. Jan 2009)

DB beenden ist schon was anderes als Connection schließen 

vielleicht hilft diese einfache google-Suche:
http://www.google.de/search?hl=de&q=Derby+Embedded+stop+java&meta=
->
http://db.apache.org/derby/papers/DerbyTut/embedded_intro.html#shutdown


----------



## Plumperquatsch (26. Jan 2009)

Asche auf mein Haupt! Mein Fehler war echt, dass ich nicht daran gedacht habe, dass die DB noch läuft. Nun ja, dank Eurer Hilfe sind mir die Tomaten von den Augen genommen worden und es funktioniert jetzt!

Danke Euch!


----------

