Welche Datenbank würd ich wollen? Teil 2

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
So, zuerst mal danke an alle die mir letztens beratend zur Seite standen :)

Meine Wahl ist gefallen: *tata* H2. Und zwar wegen dem embedded.

Das ganze ist für mein MultiPlayer-Rpg. Bisher hab ich meine ganzen Daten serverseitig mit JDom verwaltet,
das wurd mir jetzt zu unübersichtlich (zu langsam konnt ich noch nicht feststellen), und da ja der Server
auch in Java geschrieben ist dacht ich mir das passt.

Also H2 installiert, ein bisschen aufgepasst was dabei so passiert, dann das jar-file in mein Project einbunden.
Testcode aus dem quickstart eingebaut und tun gedrückt.

Und es lief :) direkt beim ersten mal. Klasse :)

Aaaber... gleichzeitig mit der Weboberfläche und meinem Server drauf connecten geht nicht :( Aus der Doku bin
ich nicht schlau geworden, ich muss aber zugeben das mein Englisch so mies ist das ich nicht mal die Hälfte verstanden hab.

Deshalb hier ein paar Fragen:

1. Wie wo wann warum wird die Datenbank gestartet? Ich kann direkt nach dem rechnerstart mit der Weboberfläche
drauf connecten, was mich wundert weil ich sie nie gestartet hab??

2. Wie kann ich mit mehreren Clients drauf connecten? Ich hab aus dem Handbuch nur entschlüsseln können das es gehen soll. Nur wie?

3. der embedded mode: wenn ich das wie in dem Quickstart angegeben über diesen einbundenen H2-Treiber connecte,
reicht das dann schon? ist das dann embedded? Weil das connection aufbauen dauert fast 5 sekunden in meinem Programm.

4. Wie kann ich nen Primärindex autoincrement anlegen? laut Handbuch wär ich mir nichtmal sicher das es überhaupt
geht, das Wort autoincrement steht ganze einmal in dem Text, und da auch nur irgendwas von einer obscuren sql-
anweisung?

5. Wie kann ich eine Tabelle mit mehr als einem Schlüssel anlegen? In meinem Fall wären es 2 varchar und ein int.

Danke schonmal
 

HoaX

Top Contributor
1) das solltest du wissen, von alleine startet sich keine datenbank
2) du brauchst dazu einen server -> warum ist dann "embedded" dein hauptauswahlkriterium?
3) würdest du den link direkt dazu schreiben würde ich sogar draufklicken, aber auswendig kennt hier sicherlich keienr die seite.
allgemein: wenn du hinter hinter jdbc:h2: einen dateipfad angibst ist es embedded, wenn du mit //rechnernameBzwIp/pfad weiter machst ist es nicht embedded sondern eben server
4) nie gebraucht, sequence?
5) welchen typ von schlüssel?
 
G

Guest

Gast
HoaX hat gesagt.:
1) das solltest du wissen, von alleine startet sich keine datenbank
2) du brauchst dazu einen server -> warum ist dann "embedded" dein hauptauswahlkriterium?
3) würdest du den link direkt dazu schreiben würde ich sogar draufklicken, aber auswendig kennt hier sicherlich keienr die seite.
allgemein: wenn du hinter hinter jdbc:h2: einen dateipfad angibst ist es embedded, wenn du mit //rechnernameBzwIp/pfad weiter machst ist es nicht embedded sondern eben server
4) nie gebraucht, sequence?
5) welchen typ von schlüssel?

Zu 1: Da hast du recht, deswegen versteh ichs ja nicht. Ich müsst doch zumindest über die console zuerst die Datenbank starten, oder? Mach ich nicht, geht aber trotzdem, und das sagt mir das ich da was nicht verstanden hab.

Zu 2: Naja den server brauch ich nur zum Entwickeln, wenn ich gleichzeitig in der Datenbank gucken und trotzdem in
Eclipse den Debugger nutzen will :) im produktivbetrieb würd ich das embedded nutzen, zum coden den server halt

Zu 3:
Link

Code:
import java.sql.*;
public class Test {
  public static void main(String[] a)
  throws Exception {
    Class.forName("org.h2.Driver");
    Connection conn = DriverManager.
      getConnection("jdbc:h2:~/test", "sa", "");
    // add application code here
  }
}

zu 4: Was ist sequenz? Ich kenn das aus Oracle, das ist auch so ne fortlaufende Nummer, oder? Ist das nicht overhead?

zu 5: Ich glaub ich versteh die Frage nicht.
Ich bräucht sowas: create table test (id int primary key, name varchar (255) primary key, user varchar (255) primary key), aber da bekomm ich als Meldung :versuch zweiten primärschlüssel anzulegen. Soll halt ein zusammengesetzter Schlüssel sein.
 

Yzebär

Bekanntes Mitglied
5) Probier mal sowas:

CREATE TABLE Autor
(ISBN INT(11) NOT NULL,
VName VARCHAR(15) NOT NULL,
NName VARCHAR(15) NOT NULL,
PRIMARY KEY (ISBN, VName, NName)
);
 

robertpic71

Bekanntes Mitglied
Zu 1)
So ist das mit der embbedded Datenbank - der erste Connect startet die Datenbankinstanz.

zu 2)

Ich drehe die Sache lieber um:

Beim Start deines programmes ladest du den Treiber und connectest im Filemodus.

Zusätzlich startest du dann einen TCP-Server (den Start von irgendeinem Testumgebungs-Flag abhängig machen)

Code:
        import org.h2.tools.Server;
       ...
        Server server;
        ...
        String[] args = new String[]{"-tcpAllowOthers", "true"};
	try {
	    server = Server.createTcpServer(args);
	    server.start();    
	} catch (SQLException e) {
	    System.err.println("TCP-Server starten fehlgeschlagen");
	    e.printStackTrace();
	}

Vom Web-Client (oder jedem anderen SQL-Tool in Eclipse oder NetBeans) connectest du dann mit folgendem Connectionstring:

jdbc:h2:tcp:10.11.22.3/D:/DB/artikel4

Der Dateipfad muss mit dem aus dem Fileconnect übereinstimmen.

Optimalerweise macht man bei Programmende noch ein server.shutdown();


3.) Wenns länger dauert macht der eine Datenbank. Wenn man sicher ist, dass es die Datenbank schon gibt, sollte man die URL ergänzen:
String url = "jdbc:h2:/data/sample;IFEXISTS=TRUE";

4) H2 sollte so "frißt" relative viele SQL-Varianten, z.B.
Code:
CREATE TABLE users (
         id INT  AUTO_INCREMENT PRIMARY KEY,
         name VARCHAR(50),
         data2 VARCHAR(100)
       );

5.) Von 2 Primärschlüsseln rate ich mal ab (Performance, Foreign Keys.....). Abgesehen davon, soll der Name eindeutig sein? Wenn ja, dann geht das mit 2 Keys daneben: ID 1 Maier, ID 2 Maier, ID 3 Maier....

Mit:

Code:
create unique index username on users(name)

erhält man eindeutige Usernamen und einen performanten Zugriff wenn z.B. beim Login mit:
Code:
select * from users where name = ?
abfragt.

/Robert
 
G

Guest

Gast
@YzeBär Danke, eigentlich hab ich genau das gesucht, aber was robertpic71 schreibt bringt mich konzeptmässig
erstmal zum grübeln was besser ist in meinen Fällen.

@robertpic71 Dir auch erstmal danke :), das ist schonmal unheimlich hilfreich gewesen. Da ich hier kein H2 hab
komm ich erst heut abend zum ausbrobieren, aber ich denke genau das hab ich gebraucht. Und super erklärt, grad
das die Datenbank mit der ersten Connection startet ist schon wichtig zu wissen. Ich hab mir da den Wolf
gesucht :roll:

Was mir jetzt noch nicht so ganz klar ist ist der H2\service-Ordner. Da sind ein paar bat-Dateien drin, mit denen ich
gestern nacht noch rumgespielt hab:

1_install_service.bat : wohl um H2 als Dienst zu installieren?
5_uninstall_service.bat : entsprechend wär das dann klar
2_start_service.bat : äh... Dienst starten?
4_stop_service.bat : entsprechend synonym.

Für was sind die? Bei der Verwendung der Datenbank wie in diesem Tread bisher beschrieben wüsst ich grad nicht
warum ich die brauchen sollte. Zumal sie bei meinen Experimenten letzte Nacht nicht weitergeholfen haben.
 

robertpic71

Bekanntes Mitglied
Für was sind die? Bei der Verwendung der Datenbank wie in diesem Tread bisher beschrieben wüsst ich grad nicht
warum ich die brauchen sollte. Zumal sie bei meinen Experimenten letzte Nacht nicht weitergeholfen haben.

Ich füge der Antwort 1) noch etwas hinzu, vielleicht wird das dann klarer:

So ist das mit der embedded Datenbank - der erste Connect startet die Datenbankinstanz. Der embedded Modus wird in der Connection-Url mit file: oder mem: (für Memorydatenbank) eingeleitet. Wenn du im H2-Wartungs-Webserver (auch ein Javaprogramm) eine embedded-Url (file:.., mem:..) angibst, wird in dessen JVM die verwaltende Datenbankinstanz gestartet.

Das hilft nur wenig, wenn alle auf die selbe Datenbank zugreifen sollen. Bei der Memory-Datenbank hat dann jeder seine eigene Version und bei file: locked die erste Instanz, die anderen aus.

Deshalb:
Einer startet mit embedded und den TCP-Server, die anderen connecten mit tcp: als Client.

Der Service.bat Dateien dienen dazu H2 als Stand-Alone-Datenbank ala MySQL zu betreiben.

In deinem Fall gibt es sowieso ein Serverprogramm, bei welchem sich der Betrieb Datenbank anbietet. Bei anders gestrickten Anwendungen (nur Clients) gibt es keine durchgehend laufende JVM. Hier startet man die Datenbank extra und alle Anwendungen greifen mittels tcp: als Client zu.

/Robert
 
G

Gast

Gast
Danke dir, robertpic71. Sehr gut erklärt, klar und einleuchtend.

Keine Fragen mehr, Danke :)

Hakt mich jemand ab?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Welche Datenbank würd ich wollen? Datenbankprogrammierung 13
J Welche Kriterien haben Einfluss auf die Geschwindigkeit einer Datenbank ? Datenbankprogrammierung 4
F welche Datenbank für Messwerte? Datenbankprogrammierung 4
K GWT, welche Datenbank? Datenbankprogrammierung 1
H Welche Datenbank Datenbankprogrammierung 4
C Welche Datenbank Datenbankprogrammierung 20
H welche datenbank nehmen? Datenbankprogrammierung 5
D welche Datenbank Datenbankprogrammierung 5
V Welche Datenbank eignet sich? Pflegeaufwand? Datenbankprogrammierung 4
G Anfänger: Welche Datenbank ist sinnvoll? Datenbankprogrammierung 11
ruutaiokwu MySQL: Messwerte, welche stagnieren interpolieren? Datenbankprogrammierung 2
I Oracle Wie ermitteln, welche Benutzer-(!)Tabellen in einer DB sind? Datenbankprogrammierung 1
K Welche DBS verwenden? Datenbankprogrammierung 0
M Derby/JavaDB Derby SQL Insert mit AUTO_INCREMENT, welche ID wurde vergeben? Datenbankprogrammierung 6
H Klasse welche Mysql Daten zurück gibt Datenbankprogrammierung 18
G Welche Methoden transactional machen Datenbankprogrammierung 2
F Welche DB? Datenbankprogrammierung 4
ruutaiokwu unique kombination, welche mehrfach vorkommen darf??? Datenbankprogrammierung 3
G welche Datenbanktabellen für folgende Attribute Datenbankprogrammierung 3
M Hibernate - Welche Beziehung? Datenbankprogrammierung 3
N Welche Befehle? Datenbankprogrammierung 4
G Welche DB würdet ihr nehmen Datenbankprogrammierung 7
B Welche DB verwenden Datenbankprogrammierung 3
J Welche Firebird Variante kann ich hosten Datenbankprogrammierung 6
torresbig MySQL hibernate - could not resolve entity class ... (Datenbank Anfänger) Datenbankprogrammierung 19
M Meine Datenbank lässt sich mit meiner Methode nicht ändern Datenbankprogrammierung 1
I SaaS Applikation: pro Kunde eine Datenbank / Schema oder eine DB für alle Kunden? Datenbankprogrammierung 76
T SQL-Statement Datenbank nach SQL Statement schließen? Datenbankprogrammierung 7
M Datenbank Zugraff nach Umwandlung in .jar-Datei nicht mehr möglich Datenbankprogrammierung 4
Auf MySql Datenbank zugreifen funktioniert nicht Datenbankprogrammierung 8
MongoDB-Datenbank in Androidstudio einbinden Datenbankprogrammierung 1
thor_norsk Datenbank: Apache Derby Datenbankprogrammierung 6
B SQlite Datenbank, trotz Statements wurden nicht alle Zeilen erzeugt? Datenbankprogrammierung 35
M Datenbank mit REST API Datenbankprogrammierung 66
M Entfernte Datenbank Datenbankprogrammierung 11
T Datenbank: Tabelle erstellen bei Web-Applikation Datenbankprogrammierung 4
D SQLite Datenbank in Android Studio (Java) durchsuchen Datenbankprogrammierung 3
M MySQL Datenbank in Array Datenbankprogrammierung 2
S Den letzten Eintrag aus Datenbank ziehen (Oracle SQL Dev.) Datenbankprogrammierung 14
N Datenbank abfragen nach bestimmten Wort Datenbankprogrammierung 7
Beginner22 Zugriff auf Datenbank aus Java über mariadb Datenbankprogrammierung 3
ma095 value NULL- Datenbank Postgresql Spring - intellij community Datenbankprogrammierung 0
raptorrs Plötzlich keine Verbindung zur Datenbank mehr möglich Datenbankprogrammierung 14
Davee SQLite SQLite Datenbank lässt sich nicht auf anderen PCs öffnen Datenbankprogrammierung 8
P Datenbank Tool - besser als oracle SQL Developer gesucht mit effizinte Verbindungsverwaltung Datenbankprogrammierung 2
X JPA (EclipseLink) und Oracle Datenbank Datenbankprogrammierung 2
T Datenbank auf einer Webseite aus einer Exceltabelle erstellen Datenbankprogrammierung 5
L SQL Datenbank Datenbankprogrammierung 7
L SQL Datenbank INSERT INTO Datenbankprogrammierung 6
L SQL Datenbank Tabelle insert Datenbankprogrammierung 7
L SQL Datenbank Tabelle erstellen Datenbankprogrammierung 6
nonickatall MySQL Auf neue Datensätze in einer Datenbank reagieren Datenbankprogrammierung 5
W MYSQL Datenbank Login Android Datenbankprogrammierung 3
anton1 Online Datenbank Datenbankprogrammierung 7
krgewb H2-Datenbank öffnen Datenbankprogrammierung 8
J Datenbank abfragen Datenbankprogrammierung 6
P Verbindung zu einer Access Datenbank per Eclipse oder Intellij Datenbankprogrammierung 0
O SQL Abfragen mit Mini Datenbank Datenbankprogrammierung 12
Z Datenbank Choicebox wird nicht befüllt Datenbankprogrammierung 15
S Suche In SQL Datenbank mit array Datenbankprogrammierung 6
P Enum in der Datenbank Datenbankprogrammierung 1
Z SQL- Datenbank 1.PK zu 2.FK Datenbankprogrammierung 3
E netbeans - jsp Daten in Datenbank hinzufügen Datenbankprogrammierung 2
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
MiMa wo Datenbank verbinden/trennen? Datenbankprogrammierung 1
H MySQL Verbindung Datenbank und Eclipse (Java) Datenbankprogrammierung 5
DeltaPilot12 Datenbank connect Funktion Datenbankprogrammierung 7
J Oracle Datenbank-Tabelle per Combobox (oder ähnliches) auswählen Datenbankprogrammierung 3
N SQL Datenbank Spalte in Java Array Datenbankprogrammierung 2
J JAR-Datei und Datenbank Datenbankprogrammierung 8
Bluedaishi Datenbank Abfrage Datenbankprogrammierung 36
Kirby.exe Zeile aus der Datenbank holen wenn ein match besteht Datenbankprogrammierung 7
Kirby.exe Es werden keine Einträge in der Datenbank gemacht Datenbankprogrammierung 23
C Datenbank anlegen und über eine Website mit Daten füllen? Datenbankprogrammierung 25
B Frage zu Datenbank Design bei Events (ZenDesk) Datenbankprogrammierung 1
M SQLite Datenbank mit SQLite Datenbankprogrammierung 7
C String in Datenbank einfügen Datenbankprogrammierung 11
C Keinen Zugrift auf Datenbank Datenbankprogrammierung 2
C Datenbank zugreifen Datenbankprogrammierung 10
L Auf Strato Datenbank zugreifen Datenbankprogrammierung 7
H Fehler bei getConnection zu MySQL Datenbank Datenbankprogrammierung 18
G Datenbank Statement Datenbankprogrammierung 22
M Datenbank editierbach machen in JTable Datenbankprogrammierung 13
S Datenbank MySQL und Java Datenbankprogrammierung 8
M H2 Verbindung zur Datenbank komplett schließen Datenbankprogrammierung 11
J Aufbau meiner Datenbank/Tabelle - Verbessern? So lassen? Datenbankprogrammierung 39
J Nur CRUD über Datenbank Klasse, oder auch mehr ? Datenbankprogrammierung 2
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
L Appabsturz mit Datenbank Datenbankprogrammierung 4
J Zahlungseingänge von mehreren Kunden wie am besten abbilden in der Datenbank ? Datenbankprogrammierung 8
L Datenbank sichern Datenbankprogrammierung 8
S Daten von SQLite Datenbank nutzen Datenbankprogrammierung 5
J Datenbank VPS Server Datenbankprogrammierung 3
H MySQL MySQL - Keine Verbindung zur Datenbank?! Datenbankprogrammierung 4
NIckbrick MySQL Befehle aus Datenbank auslesen Datenbankprogrammierung 21
S Datenbank/Java true/false Datenbankprogrammierung 8
J JUNIT und CRUD-Datenbank Datenbankprogrammierung 4
F Datenbank/Datenabgleich/Wiederholungsabfrage Datenbankprogrammierung 12
@SupressWarnings() Eure bevorzugte Datenbank-Library Datenbankprogrammierung 9

Ähnliche Java Themen

Neue Themen


Oben