# Datenbank anlegen



## Balian (3. Jun 2007)

Hallo Zusammen,

mein Programm benötig eine Datenbank. Wie implementiere ich die Installation (embedd) richtig?

Ich dachte, prüfen ob eine Connection zur Datenbank im Userhomeverzeichnis möglich ist, wenn nein Datenbank anlegen. Im schlimmsten Fall ist die Datenbank vorhanden und die Connection konnte nicht angelegt werden, allerdings würde dann die vorhandene Datenbank nicht überschrieben, sondern wirft eine Exception. So richtig, oder wie macht ihr das ?

Gruß

Balian


----------



## Gast (3. Jun 2007)

Welche Datenbank willst du denn benutzen?


----------



## Acha (4. Jun 2007)

Erst einmal muß die Datenbank (egal welche) schon vorhanden und installiert sein. Dann brauchst Du einen eingerichteten Nutzer, mit dem Dein Programm testen kann, ob eine Connection zur DB möglich ist. Danach wird geprüft, ob die Tabelle, mit welcher Du arbeiten willst, vorhanden ist. Wenn nein, wird sie angelegt (CREATE TABLE ...), wenn ja, kannst Du Datenmanipulationen in der Tabelle vornehmen (Insert/Delete/Update/Select). So hab ich Deinen Post zumindest verstanden...

Wo genau hast Du da jetzt ein Problem? Worauf bezieht sich Deine Frage? ...

MFG

Acha


----------



## Balian (5. Jun 2007)

Also ich verwende eine HSQLDB im emmbed-Modus. In Eclipse habe ich mir eine Klasse erstellt, die mir eine Datenbank mit Ausgangsdaten erstellt.

Ich führe also diese Klasse aus, um eine Datenbank zu erstellen.

Dann teste ich fröhlich meine Anwendung mit dieser Datenbank.

Nun möchte ich mein Anwendung auf einem anderen Rechner testen und kann eine jar erstellen etc. In der Anwendung ist aber die Klasse zur Erstellung der Datenbank nicht vorhanden. Heisst ich habe ein Jar-File mit der Anwendung, aber ohne Datenbank.

Nun meine Überlegung, wie bekomme ich die Datenbank auf den anderen Rechner. Okay, wahrscheinlich die Klasse direkt ins Programm einbauen (kein Problem). Wie kann ich eine Prüfung einbauen, dass die Anwendung nicht bei jedem Programmstart dann versucht das Datenbankskript auszuführen?

Ich hoffe, es ist jatzt ein wenig verständlicher.   

Gruß

Balian


----------



## Gast (6. Jun 2007)

hmm Klassen werden nicht einfach so ausgeführt. Das musst du schon selber machen.

Verstehe dein Problem nicht.


----------



## Guest (6. Jun 2007)

Also das ist mir klar...... 

Ich wollte einfach nur wissen wie ihr vorgeht.

Bei Anwendungsstart prüfen, ob Connection zur Datenbank hergestellt werden kann, wenn nicht, dann Datenbank anlegen? Ist so Eurer Algorithmus, zur Prüfung, ob die Datenbank schon angelegt ist?

Gruß


----------



## Balian (6. Jun 2007)

Also ich muss jetzt nochmal nerven. Ich versuche im Programm eine Connection zu einer HSQL-Datenbank aufzubauen. Standardmäßig ist es ja bei HSQL, so dass er erst versucht, die Connection aufzubauen. Findet er keine Datenbank, so legt er diese automatisch an. Richtig ?? 


Okay, was wenn die Connection nicht aufgebaut werden kann und es schon eine Datenbank gibt? Wird die vorhandene Datenbank dann überschrieben?

Gruß

Balian

Ps.: Hab in der HSQLDB-Doku keine SQL-Syntax für die Überprüfung gefunden, ob eine Tabelle existiert. Weiß das Jemand?


----------



## Geekhead (3. Aug 2007)

Also mal so als Checkliste

- hsqldb hast du als Userlib angelegt?
(Windows - Preferences - Java - Build Path - User Libs)
Dort kannst du deine gernellen externen Jars allgemein verwalten und in Projecte einfügen
- in deinem Project hast du die hsqldb als userlib eingefügt?

Wenn das zutrifft, dann suchst du ein Plugin namens "Fat Jar".
Damit kannst du deine Anwendung in ein einzelnes Jar expotieren (was du  zwar auch so kannst, aber...), welches alle benötigten (in deinem Fall hsqldb.jar) mit reinpackt und verwaltet!

Grüße Geekhead


----------



## Guest (11. Okt 2007)

Balian hat gesagt.:
			
		

> Also ich muss jetzt nochmal nerven. Ich versuche im Programm eine Connection zu einer HSQL-Datenbank aufzubauen. Standardmäßig ist es ja bei HSQL, so dass er erst versucht, die Connection aufzubauen. Findet er keine Datenbank, so legt er diese automatisch an. Richtig ??
> 
> 
> Okay, was wenn die Connection nicht aufgebaut werden kann und es schon eine Datenbank gibt? Wird die vorhandene Datenbank dann überschrieben?
> ...




1. Wenn er die Datenbank nicht Findet legt er eine neue an. 
2. Kann keine Connection aufgebaut werden ist dein Passwort oder User nicht korrekt. Und er überschreibt sie in diesem Fall nicht und erstellt auch keine neue.

Ich hätte da auch mal eine Frage wenn die DB nicht exestiert wie kann ich eine anlegen ohne denn Standart User mit dem Standart Passwort?

Vielen Dank im Voraus


----------



## Gast (7. Aug 2008)

selbes Problem hier... Schade dass es nicht gelöst wurde...


----------



## Guest (21. Dez 2008)

Ich benutze JavaDB und wüsste auch gerne ob es eine elegantere Variante gibt, zu prüfen ob eine Datenbank bereits angelegt wurde.
Den Treiber lade ich zur Laufzeit mit der DriverShim-Klasse, die ich bei Google gefunden habe.

Dann versuche ich eine Verbindung aufzubauen

```
verbindung = DriverManager.getConnection("jdbc:derby:"dbName, username, pw)
```
per try catch ermittelt ich die SQLException und vergleiche den errorcode mit 40000 (ist zumindest bei JavaDB der Fehlercode für eine nicht gefundene DB)

```
} catch (Exception e) {
			if (((SQLException) e).getErrorCode() == 40000){
				try {
					openConnection("jdbc:derby:"dbName+";create=true", username, pw);
				} catch (SQLException e1) {
					e1.printStackTrace();
				}				
			}
}
```
Durch den Zusatz ";create=true" wird bei JavaDB eine neue Datenbank angelegt, eine Vorhandene würde überschrieben werden.
Bei jeder DB ist das wohl etwas anders, wie der Befehl bei HSQL aussieht müsste in der dazugehörigen Reference stehen.

Und für jeden, der den Sinn davon nicht versteht.

Wenn ich eine Anwendung habe die eine lokale Datenbank verwendet, muss diese natürlich beim ersten Start angelegt werden.Man kann zwar vor der Weitergabe des Programms eine leere DB mitgeben, aber es kann hilfreich sein, wenn man beim Verlust dieser DB, automatisch eine neue erzeugt.


----------

