Abfrage nach existierender SQL-Tabelle

Einklang.

Bekanntes Mitglied
Hallo,

ich habe eine SQL-Tabelle mit Infos über eine Tabelle - als Namen, spaltennamen und datentyp.

Aus diesen Informationen möchte ich nun die Tabellen selbst erstellen mittels SQL! Funktioniert soweit auch ganz gut mit folgendem Code:

Java:
ResultSet restabellen = lokaldb.executeQuery("Select * from tabelleninfos");
		   // int id_tab = res.getInt(1);
		   
		   while (restabellen.next())
			{
			   String tabellenname = restabellen.getString(2);
			   // Abfrage ob Tabelle schon existent
			
			   Statement lokaldb1 = instanz.connection.createStatement();
				
				ResultSet tabellenspaltentyp = lokaldb1.executeQuery("Select * from tabelleninfos where tabname='"+tabellenname+"'");
				
			   while (tabellenspaltentyp.next())
				{
				   String spaltenname = tabellenspaltentyp.getString(3);
				   String datentyp = tabellenspaltentyp.getString(4);
				   sqlabfrage = sqlabfrage + " " + spaltenname + " " + datentyp + ",";
				   
				}
			// Tabelle mit Spalten und Datentyp erstellen mittels "if not exist"
			   System.out.println(tabellenname + sqlabfrage);
			}
		   
		} catch (SQLException ex) {
		   System.out.println("SQL-Exception ist aufgetreten: " + ex.getMessage());
		}

Das Problem ist hier nur, dass in der Tabelle mit den Infos jeder Datensatz für einen Spaltennamen besteht - also Datensatz 1 ist tabellenname1 - spaltennamen1 - datentyp1
Datensatz 2 ist tabellenname1 - spaltenname2 - datentyp2
usw

Der erste Datensatz funktioniert super - Tabellenname wird erkannt, alle Spaltennamen und Datentyp werden ausgelesen und zu einem String zusammengefügt........!
Beim zweiten Datensatz allerdings fängt das Problem an, da im zweiten Datensatz die gleiche Tabelle als Tabellenname drin steht - also sucht er von der gleichen Tabelle wie im ersten Datensatz nach den Spalten und Datentyp..............!

Was fehlt ist eine Überprüfung des Tabellennamens, ob diese SQL-Tabelle schon erstellt wurde....... und dann dementsprechend zum nächsten Datensatz geht bis eben ein neuer Tabellenname gefunden wird.......!

Nur wie mach ich diese Abfrage, ob eine SQL-Tabelle besteht?


danke
 
Sinnvoller wäre, das richtig zu programmnieren:

- durch eine gruppierte Abfrage feststellen, wie viele Tabellen es überhaupt gibt
- dann die DB-Abfrage derart durchführen, dass alle Datensaätze zu der jeweiligen Tabelle geholt werden
- dann die Tabelle mit ihren Spalten erzeugen
 
Falls du MySQL verwendest kannst du in den Systemtabellen von MySQL nachschauen ob jene Tabelle existiert. Denn MySQL legt diese Informationen und den Aufbau selbst in Tabellen ab.
 
Bin nicht sicher, ob ich Deinen Anwendungsfall 100% verstanden habe. Glaube aber, dass es garnicht nötig ist, eine Tabelle mit Tabelleninfos vorzuhalten. Bei JDBC gibt es das Interface
Code:
DatabaseMetaData
. Darüber kann man sehr viel abfragen, z.B. auch welche Tabellen in einem Schema/einer Datenbank vorhanden sind. Holen tust Du Dir es so:
Java:
DatabaseMetaData metadata = connection.getMetaData();
Und hier der Link zur API-Doku: Java Platform SE 7 - DatabaseMetaData
 
Sinnvoller wäre, das richtig zu programmnieren:

- durch eine gruppierte Abfrage feststellen, wie viele Tabellen es überhaupt gibt
- dann die DB-Abfrage derart durchführen, dass alle Datensaätze zu der jeweiligen Tabelle geholt werden
- dann die Tabelle mit ihren Spalten erzeugen

Das mach ich ja, aber bei der Abfrage nach den TAbellen kommt eine Tabelle ja öfters vor dh die Tabelle wird immer wieder abgearbeitet mit diesen drei Schritten! Genau das ist nämlich das Problem...! 🙂
(ok in dem Code von oben wird die Tabelle noch gar nicht erzeugt, aber das hat mit dem Problem nichts zu tun...)

Falls du MySQL verwendest kannst du in den Systemtabellen von MySQL nachschauen ob jene Tabelle existiert. Denn MySQL legt diese Informationen und den Aufbau selbst in Tabellen ab.

Wie nillehammer geschrieben hat mit getMetaData()?

Bin nicht sicher, ob ich Deinen Anwendungsfall 100% verstanden habe. Glaube aber, dass es garnicht nötig ist, eine Tabelle mit Tabelleninfos vorzuhalten.

Doch weil es nicht Informationen zu einer lokalen Datenbank sind sondern das ist eine TAbelle in der ich eine SQL Tabelle auf einem Server ausgelesen habe - damit ich später weiß wo welche Daten sind! JEtzt habe ich mich dazu entschlossen, die Datenbankstruktur zu behalten und einfach lokal die gleiche Tabellenstruktur zu erstellen.... daher auch einfach die Tabellen erstellen mit den Infos zu den Tabellen auf dem Server....!

Mit der Metaabfrage könnte ich aber immer wieder Abfragen ob es die Tabelle nun gibt - da müsst ich schauen was in den Metadaten steht......... das wär also auf jeden Fall eine Lösung!
Was mir heute vormittag einfiel: Ich könnte auch ganz einfach eine Variable erstellen und dort nach der ERstellung der Tabellen den Namen eintragen und später bzw bei einem neuen SChleifendurchgang genau diese Variable dann nach dem TAbellennamen durchsuchen..... also einfach gedacht! :-D
 
Wo machst du das? Mit Select * from tabelleninfos" holst du dir alle Datensätze und nicht erstmal die Gruppe der überhaupt zu erstellenden Tabellen. Und selbstveständlich holst du dir auch nicht in einer zweiten Abfrage nur die Datensätze die zu einer zu erzeugenden Tabelle gehören

Was mir heute vormittag einfiel: Ich könnte auch ganz einfach eine Variable erstellen und dort nach der ERstellung der Tabellen den Namen eintragen und später bzw bei einem neuen SChleifendurchgang genau diese Variable dann nach dem TAbellennamen durchsuchen..... also einfach gedacht!

Murks
 

Zurück
Oben