# MySQL Tabellen über JDBC erstellen - Best Way?



## Julius (22. Februar 2012)

Hi,

ich würde gerne MySQL Tabellen mit Hilfe von Java (JDBC) erstellen und habe dafür auch schon eine Methode geschrieben.
Leider muss ich ziemlich viele Tabellen erstellen und ich weiß nicht so ganz, wie ich das am besten verpacke, sodass der Programmierstil angemessen ist.

Für jede Tabelle eine eigene Methode zu schreiben halte ich nicht für sinnvoll.
Ich dachte daran, die Statements, die die Tabellenstruktur enthalten in einem Array abzulegen und sie dann per Schleife nacheinander abzuarbeiten.
Allerdings würde das Array dann ziemlich lang werden.

Kann man es auch noch anders machen?


----------



## Fabio Hellmann (22. Februar 2012)

Hi,
ich würde eine Methode (z.B.: createTable(String name, String[] settings)) erstellen, an die ich einen Namen für den Tabellennamen übergebe. Zudem würde ich über ein String-Array die Settings übergeben, d.h.: new String[] {
   "test", // Spaltenname
   "INT", // Datentyp
   "test2", // Spaltenname
   "FLOAT", // Datentyp
   ...
}.

Gruß

Fabio


----------



## Julius (22. Februar 2012)

Das heißt, ich hätte am Ende ziemlich viele Strings, die dann nacheinander an die Methode übergeben werden?


----------



## Fabio Hellmann (22. Februar 2012)

Ja, aber das lässt sich schlecht verhindern. Außer deine Tabellen haben alle die gleiche Struktur und heißen nur unterschiedlich. Wobei ich das bezweifle.


----------



## Julius (22. Februar 2012)

Ok, danke, dann war ich ja doch schon auf dem richtigen Weg.
(Also die ganzen Statements hatte ich schon. Wollte es halt irgendwie "schöner" verpacken.)


----------



## genodeftest (22. Februar 2012)

Schau dir mal PreparedStatements an, solltest du sowieso aus Sicherheits- und Performancegründen verwenden.


----------



## Julius (23. Februar 2012)

@genodeftest
Habe es mir angeschaut.
Aber bei der Erstellung der Tabellen ist damit noch nicht wirklich ein Unterschied zu merken, oder?


Ist das eigentlich komplett falsch im Hinblick auf den Programmierstil, wenn ich eine Methode CreateTable() habe, dort die einzelnen Strings drinstehen und sehr oft hintereinander der statementExecute Befehl ausgeführt wird, anstatt die Strings auszulagern und an eine Funktion zu übergeben?


----------



## Thomas Darimont (23. Februar 2012)

Hallo,



> Kann man es auch noch anders machen?


Natürlich 

Hast du die entsprechenden SQL Create Table Skripte schon vorliegen, oder
möchtest du die generieren?

Möchtest du in deiner Anwendung eine "DB-SETUP" Routine hinterlegen, welche die Datenbank auf die
erstmalige Verwendung deiner Anwendung vorbereitet?

Eine einfache Möglichkeit wäre deine Create Table SQL Statements
in einer "Create-Table.sql" Skript-Datei zu sammeln (Auf Abhängigkeiten achten...).
Anschließend kannst du in deiner Anwendung den Inhalt der Datei laden und über JDBC 
als ein Statement ausführen.

Ich würde deine SQL Statements nicht fest Java Code verdrahten. Das erschwert nur das editieren und
schadet der Übersichtlichkeit.

Wenn du die Tabellenstrukturen programmatisch aufbauen möchtest könntest du dir auch eine kleine
TableCreator Klasse auf Basis des Builder Patterns schreiben (http://en.wikipedia.org/wiki/Builder_pattern).

Es gibt auch Bibliotheken, die dir aus XML Definitionen oder speziell annotierten Java Klassen relationale Datenbank Schemata (Tabellenstrukturen) generieren können.
http://docs.jboss.org/hibernate/core/4.0/devguide/en-US/html/ch01.html#d0e652

Gruß Tom


----------

