Kapselung Tabellen der Datenbank erzeugen.

Meeresgott

Bekanntes Mitglied
Hallo,

ich habe eine Klasse in der ich die java.sql.Connection und das java.sql.Statment initzialiesire

ich habe eine Klasse in der ich die Initialisierung der java.sql.Connection und des java.sql.Statments vornehme.
Dies mache ich in einer Methode connect() diese überprüft auch ob alle Tabellen die ich brauche auch schon in der Datenbank drin Sind wenn nicht werden sie durch den Aufruf einer anderen Methode der selben Klasse erzeugt.

Fast jede Tabelle hat eine eigen Klasse die sich um das jeweilige Handling kümmert.

Ist es nicht besser das die Klassen, die sich um das Handling kümmern überprüfen ob die Tabellen schon da sind und sie ggf. erzeugen ? oder macht es Sinn alle Tabellen an der selben Stelle im Code zu erzeugen?
 

AndyJ

Bekanntes Mitglied
Ich persoenlich denke, dass Datenbanktabellen gar nicht via Applicationcode erzeugt werden sollten (einzige Ausnahme Datenbankdesigntools). Dein Programm braucht dazu wesentlich mehr Rechte als fuer den Normalbetrieb notwendig, was ein Sicherheitsrisiko darstellt.
 

Tobse

Top Contributor
Fast jede Tabelle hat eine eigen Klasse die sich um das jeweilige Handling kümmert.

Ist es nicht besser das die Klassen, die sich um das Handling kümmern überprüfen ob die Tabellen schon da sind und sie ggf. erzeugen ? oder macht es Sinn alle Tabellen an der selben Stelle im Code zu erzeugen?

Wenn sich deine Tabellen-Klassen wirklich NUR um die Datenbanktabellen kümmern, ist das IMHO der bessere Ort, ja. Aber generell: es hört sich schwer danach an, als ob du hier einen O/RM nachbaust. DU wärst IMHO mit Lösungen wie Hibernate vieeeeel besser bedient.

P.S.: Im Betrieb sollten DB-Tabellen NIEMALS angelegt werden. Nicht nur, weil es, wie @Meeresgott schon sagte, ein Sicherheitsrisiko ist, sonder auch, weil es schlicht ein Setup-Task ist. Migration von Datenbanken kann man mit Liquibase oder Flyway super managen.
 

Meeresgott

Bekanntes Mitglied
Da ich mich nicht vorher einen MySQL Server installieren kann bin ich auf eine kleinere Variante umgestiegen, H2-Database und dachte es wäre einfacher den Code zum erstellen dieser kleinen Datenbank in meinem Programm unterzubringen.
@Tobse Also würdest du mir raten einen kleinen Installer zu schreiben der die Datenbank vorkonfiguriert und mein Hauptprogramm dann auf die schon fertig angelegte Datenbank "loslassen"?
:)
 

Thallius

Top Contributor
Richtig...

das ganze nutzt aber nur dann etwas, wenn dein installprogramm einen anderen Benutzer auf der Datenbank verwendet als das eigentliche Programm. Dein Installationsprogramm braucht die Rechte um tabelllen anzulegen. Das Hauptprogramm in der Regln nur rechte um Tabellen zu lesen und zu schreiben.

Viele verwenden leider immer einfach den Root Benutzer einer DB. Das ist natürlich gerade bei Java grob fahrlässig, da ich die Zugangsdaten innerhalb von Sekunden aus dem Code herausgefunden habe und dann mit der Datenbank machen kann was ich will.

Als immer schön verschiedene Benutzer anlegen und verwenden.

Wenn du das machst kannst du übrigens auch gerne den Installer Code in dein Hauptprogramm integrieren. Nur sollltest du dann beim Aufruf dieser Methoden vorher einfach die Zugangsdaten über einen Dialog oder eine externe (nicht mit dem Programm mitgelieferte) Datei erfragen. Somit kann diese keiner bekommen und deine DB ist wieder geschützt.

Gruß

Claus
 
Zuletzt bearbeitet:

Tobse

Top Contributor
die Zugangsdaten innerhalb von Sekunden aus dem Code herausgefunden

Wie du selbst schreibst, ist es eine absolute Todsünde, Zugangsdaten in den Code zu schreiben:

die Zugangsdaten über [...] eine externe (nicht mit dem Programm mitgelieferte) Datei erfragen

Wenn wir hier von einer Webanwendung Sprechen dann sollte die DB hauptsächlich von einer Firewall geschützt werden und die Zugangsdaten sollten NUR im Produktivsystem hinterlegt sein.

Bei einer Desktopanwendung ist das alles sowieso nur Augenwischerei weil die angreiffer Physikalischen Zugriff auf den Rechner und die Datenbank-Dateien haben.
 

Thallius

Top Contributor
Wenn wir hier von einer Webanwendung Sprechen dann sollte die DB hauptsächlich von einer Firewall geschützt werden und die Zugangsdaten sollten NUR im Produktivsystem hinterlegt sein.

Bei einer Desktopanwendung ist das alles sowieso nur Augenwischerei weil die angreiffer Physikalischen Zugriff auf den Rechner und die Datenbank-Dateien haben.

Ich dachte jetzt eher an eine Desktopanwendung die auf eine Datenbank auf einem externen Server zugreift. Wobei man hier nach Möglichkeit natürlich besser mit einem Webservice arbeitet.

Gruß

Claus
 

Meeresgott

Bekanntes Mitglied
Die Anwendung mit der H2-Datenbank ist nicht wirklich eine Desktop-Anwendung. Es ist ein kleines Programm, dass Messdaten sammelt.

das ganze nutzt aber nur dann etwas, wenn dein installprogramm einen anderen Benutzer auf der Datenbank verwendet als das eigentliche Programm

Bei H2 ist es meines Wissens nicht möglich verschiedene User mit verschiedenen rechten Anzulegen.
Zumindest nicht in der im Code Integrierten Variante. Beim H2-Database Server ist wahrscheinlich sowas vorhanden. Ist für mich nur leider genauso unpraktisch wie der MySQL-Server.

ch dachte jetzt eher an eine Desktopanwendung die auf eine Datenbank auf einem externen Server zugreift. Wobei man hier nach Möglichkeit natürlich besser mit einem Webservice arbeitet.

Diese Funktion habe ich auch um die Messdaten einzusammeln. (Alle 24h Stunden überträgt mein Programm die Liste mit den Messdaten an einen Server).
Das Programm hat allerdings nicht direkten Zugang zu einer Datenbank sondern über einen Server der einen Technischen-User benutzt.

Der "User" meines Clients hat nur das Elementarrecht auf einer einzigen Tabelle was hinzufügen zu dürfen. Es ist also kein großes Problem wenn jemand an die Userdaten kommt. Da ein Algorithmus die Eingaben überwacht und wenn Nonsens rein geschrieben der User gesperrt wird.
Und ich bekomme dann eine Nachricht und muss mich dann selbst drum kümmern.

Es geht mir bei der Erstellung der H2-Datenbank nur um: "wie man es macht".
Auch wenn ich keine Verschiedenen User habe möchte ich es dennoch so Professionell wie möglich machen.

Und ich fand die Idee mit dem Installer sehr gut :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C MySQL Tabellen sortieren. Allgemeine Java-Themen 33
L APACHE POI PIVOT TABELLEN Allgemeine Java-Themen 4
C Aus MEHREREN Excel Tabellen bestimmte Zelle addieren Allgemeine Java-Themen 1
AssELAss Best Practice Checksumme über jede Spalte zweier Tabellen und vergleichen Allgemeine Java-Themen 3
D Mehrere String-Werte in eine Tabellen-Zelle schreiben Allgemeine Java-Themen 8
H2SO3- speichern von Daten in seeeeeehr großen Tabellen (nicht DB) Allgemeine Java-Themen 8
MQue über iBatis Tabellen erzeugen Allgemeine Java-Themen 4
R Tabellen inhalt mal vorhanden, mal nicht!?! Allgemeine Java-Themen 2
8u3631984 Bilder in Datenbank speichern - sinnvoll Allgemeine Java-Themen 5
S Kochbuch bzw. Rezepte-Datenbank app mit Swing..? Allgemeine Java-Themen 5
N relativier Pfad für sqlite-Datenbank in Gradle/IntelliJ Allgemeine Java-Themen 2
Avalon Data Transfer Objekte aus Datenbank erstellen Allgemeine Java-Themen 8
B API Token in Datenbank ablegen? Allgemeine Java-Themen 9
S Einzigartigen String in Datenbank finden und löschen Allgemeine Java-Themen 23
P Datenbank-MiniGUI fügt keine Daten ein Allgemeine Java-Themen 4
Q-bert Strings aus der JList in eine Datenbank speichern Allgemeine Java-Themen 1
D Daten in MySQL-Datenbank schreiben Allgemeine Java-Themen 13
looparda Unit Test - Abgänigkeit zur Datenbank isolieren Allgemeine Java-Themen 3
T Datentypen MNIST Datenbank auslesen (.gz) Allgemeine Java-Themen 0
O 2 Combobox in Abhängigkeit von der 1 Combobox (Datenbank) Allgemeine Java-Themen 1
L Daten ohne Datenbank richtig abspeichern Allgemeine Java-Themen 5
M Objekt serialisieren/deserialisieren und in einer SQLite-Datenbank speichern Allgemeine Java-Themen 3
F OOP Datenbank-Klasse überall verfübar Allgemeine Java-Themen 2
R Test Umgebung für Datenbank erstellen, was braucht es? Allgemeine Java-Themen 14
D OOP Design Pattern für GUI - Datenbank Anwendung Allgemeine Java-Themen 1
T Zugriff auf Datenbank Allgemeine Java-Themen 1
G Datenbank von nöten? Allgemeine Java-Themen 7
3 Backup von h2-Datenbank-Datei erstellen Allgemeine Java-Themen 6
S Java DateTime für Datenbank Allgemeine Java-Themen 4
F Alternative sun.jdbc.odbc.JdbcOdbcDriver (Access Datenbank) Allgemeine Java-Themen 2
vandread Daten verschlüsseln mit Java oder Datenbank Allgemeine Java-Themen 15
P MYSQL Datenbank Dump einspielen Allgemeine Java-Themen 1
M SQL Datenbank in JAVA Projekt Allgemeine Java-Themen 3
P iTunes Datenbank manipulieren Allgemeine Java-Themen 2
A Ausführbare Java-Datei aus Projekt und Datenbank Allgemeine Java-Themen 3
T Datenbank oder Filesystem? (E-Learning) Allgemeine Java-Themen 2
N Datei aus Datenbank öffnen mit Standardanwendung Allgemeine Java-Themen 2
J Datenbank und OO-Aufsatz Allgemeine Java-Themen 9
M BufferedReader: Vom Logfile zur Datenbank Allgemeine Java-Themen 6
P Klassen Template-Klasse für Datenbank-Abfragen erstellen Allgemeine Java-Themen 2
E JAVA Alternativen zur Datenbank? Allgemeine Java-Themen 7
Dit_ GeoKoordinaten Datenbank (nicht nur Städte) Allgemeine Java-Themen 6
J Progress Bar während Datenbank Erstellung Allgemeine Java-Themen 2
C Datenbank - Textfiles - Anderes Allgemeine Java-Themen 34
T Datenbank lässt sich un Entwicklungsumgebung öffnen, aus .jar aber nicht Allgemeine Java-Themen 9
G JNDI/LDAP/Datenbank Allgemeine Java-Themen 2
Meldanor Speichern der Datenbank - Lohnen sich mehrere Threads? Allgemeine Java-Themen 2
hdi [Free Download] Film-Datenbank Allgemeine Java-Themen 30
G Excel-Daten in Datenbank speichern - Problem mit leeren Feldern Allgemeine Java-Themen 7
K von List getSelected auf ResultSet Datenbank löschen Allgemeine Java-Themen 2
C Java Polling, Server Prozedur oder doch Datenbank? Allgemeine Java-Themen 4
H .dbf (IV) Datenbank einlesen Allgemeine Java-Themen 9
D Recipes / Codeschnipsel Datenbank für Java? Allgemeine Java-Themen 3
T MySQl Datenbank als Array ausgeben Allgemeine Java-Themen 11
M Rechenweg in Datenbank speichern und nutzen Allgemeine Java-Themen 6
O viele Datensätze aus Datenbank - Java Heap Space - Excepion Allgemeine Java-Themen 25
E Datenbank/iBatis Fehlermeldung Allgemeine Java-Themen 4
G Datenbank zur laufzeit wechseln Allgemeine Java-Themen 11
N ClassLoader - Laden von Bytecode aus einer Datenbank Allgemeine Java-Themen 6
S Speicherung von Daten: Datenbank(sql) oder xml? Allgemeine Java-Themen 9
F Vector in eine Datenbank speichern? Allgemeine Java-Themen 3
A Problem beim Starten der H2-Datenbank Allgemeine Java-Themen 4
S Datenbank Abfragen mit großen Datenmengen Allgemeine Java-Themen 22
G Datenbank-Anwendung schnell erstellen. Allgemeine Java-Themen 7
P Datenbank Tabelle spiegeln Allgemeine Java-Themen 22
E MySQL-Datenbank <-> HashMap/TreeMap Allgemeine Java-Themen 1
P Zugriff auf die DatenBank Allgemeine Java-Themen 44
H Daten aus MySQL datenbank auslesen und in ArrayList stecken Allgemeine Java-Themen 8
P Timestamp in eine Firebird-Datenbank einfügen Allgemeine Java-Themen 6
P Java Acces Datenbank Problem ! (Brauche eine Abfrage) Allgemeine Java-Themen 5
B Datenbank anlegen Allgemeine Java-Themen 10
N Datenbank vs. Filesystem Allgemeine Java-Themen 5
F datenbank oder csv etc Allgemeine Java-Themen 6
V Brauche Beratung in Sachen Java+Datenbank+Web Allgemeine Java-Themen 8
G Ab wann Datenbank verwenden Allgemeine Java-Themen 15
H sichere Datenbank-Verbindung Allgemeine Java-Themen 4
H Datenbank an ein Java Client Server Programm anschliessen Allgemeine Java-Themen 3
F lizenzfreie Datenbank für JAVA-Anwendung Allgemeine Java-Themen 3
S Zeilenausgabe Datenbank Allgemeine Java-Themen 2
S Datenbank Allgemeine Java-Themen 9
G Sichere Passwortübergabe bei Datenbank Allgemeine Java-Themen 14
L Datenbank Abfrage (Felder&Tabelle nicht fix) in ArrayLis Allgemeine Java-Themen 4
S Java Datenbank auf Festplatte installieren Allgemeine Java-Themen 2
G JComboBox mit Werten aus einer Access Datenbank füllen Allgemeine Java-Themen 18
T Java Application Server + Datenbank von CD Allgemeine Java-Themen 8
G Abfrage in datenbank Allgemeine Java-Themen 5
G Daten aus MySQL-Datenbank an JFreeChart übergeben Allgemeine Java-Themen 3
D Userdaten + Datenbank? Allgemeine Java-Themen 11
G HSQLDB Datenbank-Dateien aus Jar-Datei lesen Allgemeine Java-Themen 5
I Module-Info für Jar erzeugen Allgemeine Java-Themen 7
S Klickbare Stacktraces selber erzeugen..? Allgemeine Java-Themen 9
I OpenPDF (ehem. iText) will kein PDF mit CMYK only erzeugen Allgemeine Java-Themen 6
J Runable jar erzeugen Allgemeine Java-Themen 2
O Wie kann ich in Apache POI (Excel Dateien schreiben) Datumszellen in Excel erzeugen Allgemeine Java-Themen 6
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
temi Valides Dreieck erzeugen Allgemeine Java-Themen 6
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
dereki2000 Windows Benachrichtigung erzeugen Allgemeine Java-Themen 2
J In einem Set doppelte Elemente erzeugen Allgemeine Java-Themen 4
F Objekte erzeugen Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben