HSQLDB Einzelne Tabellen abfragen?

Huhu,

ich möchte von meiner Hsqldb in meinem Java programm abfragen ob 3 bestimmte Tabellen vorhanden sind.( wenn nicht sollen diese erstellt werden )
Ich habe irgendwo gelesen, dass das mit getMetaData oder so ähnlich gehen soll.
Jemand vielleicht eine genauere Ahnung ? Denn etwas wirklich erklärendes dazu habe ich nicht gefunden :rtfm:

Grüße
Krabbelfiechle
 

turtle

Top Contributor
Dieses ist eine komische Anforderung;)

Denn normalerweise sollte dein Programm mit einer bestimmten Version (Schema) einer Datenbank funktionieren.

Das dieses Schema initial vorhanden und mit Daten befüllt ist, würde ich definitiv nicht mit Java machen, sondern die Datenbank es machen lassen.

In HSQLDB gibt es dazu das Kommando
SQL:
CREATE TABLE IF NOT EXISTS xyx (a int, b varchar(10))
welche eine Tabelle xyx anlegt, wenn es sie noch nicht gibt.
 
Naja,

Ich weis nicht ob das mein Problem löst denn wenn mein Programm später fertig ist,
soll es ja wenn es gestartet wird abprüfen ob die Tabellen vorhanden sind und wenn nicht
erstellen. Der Anwender soll davon ja nichts mitbekommen. Bzw. auch kein SQL Statement abegben müssen :)

Gruß
Krabbelfiechle
 

turtle

Top Contributor
Das ein Anwender davon nichts mitbekommen soll, das sehe ich auch so.

Daher kannst du ein SQL-Skript schreiben, welches die Tabellenstruktur anlegt und dabei sicherstellt nicht bereits vorhandene Tabellen zu löschen.

Dieses Skript kannst du automatisch vor dem Start deiner Anwendung aufrufen. So "sieht" der Anwender nicht, das die DB "vorbereitet" wurde.

Eine DB für einen Anwender produktiv in Betrieb zu nehmen, ist meistens eine nicht ganz triviale Aufgabe, denn das Anlegen von Tabellen ist ja nur ein erster Schritt. Schwieriger sind die Fälle, bei denen du Spalten löschen/hinzufügen möchtest, der Anwender aber bereits Datensätze angelegt hat. Damit sind wir im grossen Feld der Migration. Daher werden solche Dinge oft ohne Code gemacht sondern die Tools der DB verwendet.

Damit du, als Entwickler, sicherstellen kannst, das der Anwender eine aktuelle DB-Version hat, kannst du in einer einfachen Version SQL-Skripte, wie beschrieben,einsetzen. Oder du nutzt ein Tool wie Flyway, die diese Skripte als externe Kommandos oder während des Starts deiner Anwendung automatisch macht.
 
Lösung gefunden !

Java:
Set<String> hashSet = new HashSet<String>();
			//ich lese alle tabellen in der datenbank
			ResultSet tables = con.getMetaData().getTables(null, null, null, new String[]{"TABLE"});
			System.out.println("tables: ");
			while (tables.next()) {
				//hier füge ich die tabellen in das hashset hinzu
				hashSet.add(tables.getString("TABLE_NAME"));
				System.out.println("- " + tables.getString("TABLE_NAME"));
			}
			

			// jetzt schau ich ob die tabelle im hashset vorkommt 
			if (!hashSet.contains("ZEITBUCHUNG")) { //wenn ZEITBUCHUNG !!NICHT!! vorkommt... dann
				createTable(con, "Create table Zeitbuchung ("
									+"id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,"
									+"datum date,"
									+"von integer,"
									+"bis integer,"
									+"gebuchteZeit integer,"
									+"kommentar varchar(200)"
									+")"); //erstelle ZEITBUCHUNGSTABELLE
			} 
			if (!hashSet.contains("PROJEKT")) { 
				createTable(con, "CREATE Table Projekt ("
						 			+"id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY NOT NULL," 
						 			+"projektName varchar(100) NOT NULL,"
						 			+"beschreibung varchar(100),"
						 			+"aktiv integer,"
						 			+"kostentraeger integer"
						 			+")");
			} 
			if (!hashSet.contains("Mitarbeiter")) {
				createTable(con, "Create Table Mitarbeiter ("
									+"id integer GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY NOT NULL,"
									+"username varchar(20),"
									+"ganzerName varchar (50)"
									+")");
				
 
				// was ist ein hashset --- im prinzip das glieche wie eine liste.. nur eben als set und da hash können 2 werte nicht doppelt vorkommen...
				//d.h. wenn ich 2 mal zeitbuchung hinzufüge... passiert nix...
			}

Im Prinzip durch die Kommentare erklärt ich prüfe erst gibt es die schon wenn nicht dann erstell ich die Tabelle :)

Grüße Krabbelfiechle
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Einzelne Sql- Tabellen sichern (lokal) Datenbankprogrammierung 2
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
M MySQL Einzelne Systeminformationen speichern Datenbankprogrammierung 2
turmaline [Hibernate] NamedQuery nur einzelne Felder Datenbankprogrammierung 3
N Einzelne Spalte in MySQL-DB-Tabelle schreiben Datenbankprogrammierung 7
T Einzelne Datenbankzeile schreibend sperren? Datenbankprogrammierung 11
M DatabaseMetaData.getTables einzelne Tabelle Datenbankprogrammierung 6
A Eine einzelne Zeile schreibschützen im DataSet Datenbankprogrammierung 13
E Einzelne SQL Abfragen, oder alles zusammen? (veraendert!!!) Datenbankprogrammierung 11
OnDemand Daten auf mehrere Tabellen aufteilen oder Spalten nutzen Datenbankprogrammierung 2
Ataria SQLite Werte aus zwei Tabellen zusammenführen Datenbankprogrammierung 8
I H2 - GUI Tool.... sehe aber keine Tabellen Datenbankprogrammierung 2
Zrebna Tabellen-Erzeugung via Hibernate ignoriert 'CascadeType' settings Datenbankprogrammierung 1
H JDBC Tabellen ausgeben Datenbankprogrammierung 8
Kirby.exe Tabellen Zeilen combinen und splitten Datenbankprogrammierung 3
N Hibernate Entitäten bei Selects aus 2 Tabellen Datenbankprogrammierung 7
M Sql Tabellen erstellen Datenbankprogrammierung 3
F Tabellen automatisch erstellen wenn sie nicht existieren Datenbankprogrammierung 6
C Mapping mit Annotations von 2 Tabellen Datenbankprogrammierung 22
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
L Join zweier Tabellen in SQL Datenbankprogrammierung 2
P JSP - Daten aus 2 Tabellen in eine neue Tabelle einfügen Datenbankprogrammierung 1
I Oracle Wie ermitteln, welche Benutzer-(!)Tabellen in einer DB sind? Datenbankprogrammierung 1
H Brauche Hilfe beim Mappen von 3 Tabellen a 1:n mit hbm.xml. Datenbankprogrammierung 34
D JPQL- Query über mehrere Tabellen Datenbankprogrammierung 7
feinperligekohlensaeure MySQL Dynamische Tabellen. Wie kann man es besser machen? Datenbankprogrammierung 3
O HSQLDB Eine Entität, mehrere Tabellen Datenbankprogrammierung 8
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
D Count(*) auf 2 Tabellen anwenden Datenbankprogrammierung 7
D MySQL Many to Many Tabellen in Java abbilden? Datenbankprogrammierung 4
V SQLite 2 Tabellen vergleichen und nur Unterschiedliche Sätze rausgeben. Datenbankprogrammierung 31
F Tabellen verbinden Datenbankprogrammierung 13
L0MiN Wie kann ich eine bestimmte Seite aus verschiedenen Excel-Tabellen in eine neue Exceldatei kopieren? Datenbankprogrammierung 1
U Kann die Tabellen nicht finden Datenbankprogrammierung 0
D umschalten zwischen verschiedene Tabellen Datenbankprogrammierung 1
U SQLite Für mich etwa komplexe Abfrage via 2 Tabellen Datenbankprogrammierung 5
E Kann man, wenn man in DB2 Tabellen erstellt hat für dessen auch einen Command-File erstellen? Datenbankprogrammierung 1
M JDBC Tabellen mit Boolean Spalten können nicht erstellt werden. DB Updaten - wie? Datenbankprogrammierung 6
T Tabellen von nicht mehr vorhandenen Entities werden generiert Datenbankprogrammierung 0
J MySQL Workbench Tabellen werden verschoben Datenbankprogrammierung 1
M MySQL Tabellen dynamisch erstellen Datenbankprogrammierung 12
T Ähnliche Wrapperklassen + DB-Tabellen Datenbankprogrammierung 1
T Tabellen Alias Datenbankprogrammierung 7
M MySQL Insert über mehrere Tabellen Datenbankprogrammierung 7
J Tabellen in Tabellen finden Datenbankprogrammierung 4
S versionierte Tabellen Datenbankprogrammierung 2
K n:m Tabellen mit Hibernate erstellen Datenbankprogrammierung 1
I Was ist besser: Tabellen oder Spalten Datenbankprogrammierung 1
S MySQL Abfrage über mehrere Tabellen + Einträge werden überschrieben Datenbankprogrammierung 1
M Vergleich von Daten in verschiedenen Tabellen Datenbankprogrammierung 1
C SQL-Statement SELECT über 3 Tabellen Datenbankprogrammierung 5
G 2 Tabellen und ein spezieller Eintrag Datenbankprogrammierung 2
T Fehler beim ausgeben von Tabellen Inhalt Datenbankprogrammierung 9
T 2 Tabellen aus 2 Datenbanken miteinander vergleichen Datenbankprogrammierung 6
I MySQL Vergleich über mehrere Tabellen! Join? Datenbankprogrammierung 6
R PostgreSQL Tabellen hinzufügen, falls nicht vorhanden Datenbankprogrammierung 3
E Tabellen nacheinander auslesen Datenbankprogrammierung 10
D Übersichtliche Zuweisung von Daten in Tabellen Datenbankprogrammierung 17
S 2 Tabellen zu einer zusammenführen, INSERT INTO Fehler Datenbankprogrammierung 5
A Zugriff auf DB-Tabellen mit Objekten Datenbankprogrammierung 3
K SQL tabellen auswahl in jfreechart Datenbankprogrammierung 2
0 Alle Tabellen aus DB lesen Datenbankprogrammierung 2
F Komplexer Tabellen-Join und Ausgabe in Excel Datenbankprogrammierung 17
I Master/Detail Tabellen mit JDBC und Swing Datenbankprogrammierung 10
H Fortlaufende Nummerierung innerhalb mehrerer Tabellen Datenbankprogrammierung 4
G JOIN Abfrage über mehrere Tabellen Datenbankprogrammierung 15
Consuelo Verbinden von zwei Tabellen, foreign key Datenbankprogrammierung 4
O MySQL sql Datei einzelner Tabellen erzeugen (über Java Programm) Datenbankprogrammierung 6
T Kleine Tabellen für schnellere abfragen? Datenbankprogrammierung 3
G SQL Abfrage über mehrere Tabellen Datenbankprogrammierung 28
H SQL Abfrage - zwei tabellen vergleichen. Datenbankprogrammierung 2
R MySQL Unbenutzte Tabellen/Spalten herausfinden Datenbankprogrammierung 7
I mit Java SQL Attribute / Tabellen erstellen Datenbankprogrammierung 17
C SQL String zwei Tabellen vergleichen und gleiche Zeile löschen Datenbankprogrammierung 25
R hibernate Frage zu configFile-Pfad und Groß/Kleinschreibung von Postgres-Tabellen Datenbankprogrammierung 8
J Mit einer Abfrage Worte suchen die in Zwei Tabellen enthalten sind Datenbankprogrammierung 5
I MySQL - Anzahl Tabellen heraus finden Datenbankprogrammierung 6
B Es werden keine Tupel in Tabellen abgelegt Datenbankprogrammierung 2
S SQL inner join bei >10 Tabellen über 2 Variablen Datenbankprogrammierung 2
S HSQLDB Kopiere Tabellen Datenbankprogrammierung 2
Guybrush Threepwood Nachträgliches Ändern von Variableneigenschaften in (gefüllten) Tabellen Datenbankprogrammierung 3
J Tabellen auflisten, die in einer Datenbank enthalten sind Datenbankprogrammierung 16
T DB2 delete/update über 2 Tabellen Datenbankprogrammierung 2
T SQL Abfrage: Zeige alle Values von bestimmten Tabellen Datenbankprogrammierung 11
R Datenbanken, Tabellen normalisieren. Datenbankprogrammierung 1
A Datenbankzugriffe, mehr Tabellen Datenbankprogrammierung 12
oliver1974 JPA, JTable und 2 DB-Tabellen... Datenbankprogrammierung 2
J Starre Datenbankstruktur oder Tabellen bei Bedarf neu erzeugen? Datenbankprogrammierung 5
X Abfrage über 2 Tabellen mit Tücken Datenbankprogrammierung 3
G verbindung 2er Tabellen Datenbankprogrammierung 3
M Auswerten über drei Tabellen Datenbankprogrammierung 2
H Inserts in 2 Tabellen 1:n Datenbankprogrammierung 6
G Mehrere Tabellen abfragen Datenbankprogrammierung 7
M JavaDB/Derby: Tabellen erstellen Datenbankprogrammierung 8
G 2 Tabellen in einer 1:n Verbindung Datenbankprogrammierung 2
M insert in 2 tabellen Datenbankprogrammierung 7
MQue Metadaten für Tabellen in der Datenbank Datenbankprogrammierung 5
D aus mehreren sql tabellen matchen und sortieren Datenbankprogrammierung 6
G 2 Tabellen zusammenfügen wie? Datenbankprogrammierung 8
G Tabellen-Dokument als Datenbank Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben