# Grundfragen zu Datenbanken



## KingEldarion (11. Jan 2012)

Hi,

ich brauche in meinem Programm Datenbanken.
Ich habe noch nicht mit welchen gearbeitet, darum habe ich nun einige Fragen:

1. Es klingt so mit diesen Treibern etc. das man dafür extra etwas installieren muss.
Muss nur der Programmierer oder jeder der das Programm später benutzen will, diese Treiber oder sonstige Sachen installiert haben, ich möchte nämlich das der Nutzer nur Java installieren muss.

2. Wo gibt es ein gutes Tutorial?


EDIT:

Noch eine weitere Frage nebenbei:

Wie kann man ein BoxLayout zentrieren?


----------



## pro2 (11. Jan 2012)

Dabei unterscheidet man zwischen Datenbanksystemen, die immer auf dem System laufen (wie z.B. für eine Webseite) oder embedded Datenbanken, die dem Programm beiliegen und Daten bereitstellen.
Erstere müssen auf dem System installiert sein, letztere gehören zum Programm.

http://www.java-forum.org/datenbanken/122865-eingebettete-datenbanken.html


----------



## KingEldarion (11. Jan 2012)

Ich habe jetzt folgenden Quellcode:


```
import java.sql.*;
import org.h2.jdbcx.JdbcConnectionPool;
 
 public class Connection {
     public static void main(String... args) throws Exception {
         JdbcConnectionPool cp = JdbcConnectionPool.create(
             "jdbc:h2:~/test", "sa", "sa");
         for (String sql : args) {
             Connection conn = cp.getConnection();
             conn.createStatement().execute(sql);
             conn.close();
         }
         cp.dispose();
     }
 }
```

Aber der import von org.h2.jdbcx... ist mit der Begründung "the import cannot be resolved" fehlerhaft


----------



## Final_Striker (11. Jan 2012)

Schau mal hier: Quickstart


----------



## maestr0 (11. Jan 2012)

Hier im Forum gibt es übrigens Tutorials über Datenbanken -> Datenbanken


----------



## KingEldarion (12. Jan 2012)

Wie füge ich diese .jar in den Classpath ein.

Bzw. ist der Classpath nicht der Ordner src(arbeite mit eclipse)

Sry wenn die Frage dämlich ist...

MfG KingEldarion

EDIT: Habs selber herausgefunden!


----------



## turtle (13. Jan 2012)

Nein, der Classpath ist NICHT der src-Ordner, jedenfalls nicht nur. Über den Classpath sucht/findet Java class-Dateien (oder andere Resourcen), ähnlich wie die PATH-Variable vom OS genutzt wird, um ausführbare Programme zu finden. Vielleicht hilft das hier ja weiter.

Ich habe weitere Bibliotheken (Jar) immer in einem eigenen lib-Ordner parallel zu src. Damit kommen alle Libs, die mein Programm so benötigt zusammen und ich bin mir sicher, dass die richtigen Versionen genommen werden.

In Eclipse kannst Du den Build-Path anpassen und unter Libraries die Jars aussuchen, die Dein Programm benötigt (sollten im lib-Ordner enthalten sein). Darüber verwaltest Du also den Classpath zum Kompilieren Deines Programms.

Wenn Du Dein Programm startest, kannst Du den Classpath über die Run-Konfiguration auf der Tab-Seite Classpath einstellen. Manchmal, aber selten, werden weitere Jar benötigt, die Du nicht in Deinem Lib-Ordner hast (haben willst). Dann kannst Du darüber den Classpath für die Ausführung Deines Programm verwalten.

Wenn Du wirklich H2 als Datenbank nutzen möchtest, solltest Du also einen lib-Ordner (parallel zu src) anlegen und den JDBC-Treiber (h2-1.3.163.jar oder welche Version Du hast) da rein kopieren, den BuildPath anpassen und Dein Programm sollte starten.


----------



## KingEldarion (13. Jan 2012)

Gibts irgendwo im Internet ein vernünftiges Tutorial in Deutsch zu H2 wie man Daten abfragt und schreibt?!

Ich find nämlich garnichts

MfG KingEldarion


----------



## pro2 (13. Jan 2012)

Google

Ich find außer dem auch nichts. Du wirst dich wohl mit was englischem zufrieden geben müssen, aber es ist eh der gleiche Quellcode, also sollte das doch nicht das Problem darstellen^^


----------



## KingEldarion (16. Jan 2012)

Kleine Frage undzwar, wie genau kann ich jetzt Eingaben in die Datenbank machen und wieder ausgeben?! Und vorallem wäre so jetzt Spielerdaten eine Datenbank?
Das Tut von H2 ist der größte s*****...


```
import javax.swing.*;

import org.h2.command.ddl.CreateTable;

import java.awt.*;
import java.sql.*;




public class Start extends JFrame
{
	Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
	
	
	
	  int top = (screenSize.height);
      int left = (screenSize.width);
      
      char exception;
      
      JLabel laden = new JLabel("Daten werden geladen, dies könnte einige Zeit dauern...");
      
      public Start()
      {
    	  setTitle("Lädt Crusade of Future!");
    	  setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    	  add(laden);
    	  
    	  
      }
      
      public static void main(String[]args)
      {
    	  Start frame = new Start();
    	  
    	  frame.setSize(1000, 500);
    	  frame.setResizable(false);
    	  frame.setVisible(true);
    	  
    	  Connection con = null;
    	  try{
    		  
    		  Class.forName("org.h2.Driver");
    	        Connection conn = DriverManager.
    	            getConnection("jdbc:h2:~/test", "sa", "");
    	       
    	        	CreateTable Spielerdaten;
    	        	
    	        conn.close();
    	        
    		  
    	  }catch(Exception e){
    		  Framestart startframeX = new Framestart();
    		  startframeX.error();
    	  }
    	  Framestart startframe = new Framestart();
    	  Start starter = new Start();
    	  frame.setVisible(false);
    	  
    	  startframe.menu();
      }
      
      
      
      
}
```


----------



## Final_Striker (16. Jan 2012)

KingEldarion hat gesagt.:


> Kleine Frage undzwar, wie genau kann ich jetzt Eingaben in die Datenbank machen und wieder ausgeben?! Und vorallem wäre so jetzt Spielerdaten eine Datenbank?



Du baust eine Verbindung zu der Datenbank auf und kannst dann z.B mit SQL Statemens Daten schreiben oder lesen. ;-)


----------



## pro2 (16. Jan 2012)

Da du noch nicht viel Ahnung von Datenbanken hattest, vermute ich mal, dass du auch kein Wissen über SQL hast. 

SQL ? Wikipedia

Das ist jetzt aber auch keine Kunst. Alles was du brauchst kannst du dir schnell zusammen suchen und außerdem solltest du massig SQL Tutorials im Internet finden, auch auf Deutsch. Hier ist es übrigens für den meisten Inhalt egal, ob es dabei um MYSQL, H2 oder sonst irgendeine Datenbank geht, die SQL Befehle sind fast immer gleich.


----------



## KingEldarion (16. Jan 2012)

Das Problem ist dabei, dass ich überall solche Sachen finde:

```
CREATETABLE
```
 etc. finde.

Aber in eclipse wird mir das immer als Fehler angestrichen und meine h2 Datenbank will zum Beispiel einen folgenden Befehl haben:

```
CreateTable Spielerdaten;
```

Wieso, ich versteh den Sinn dabei einfach nicht?!

Darum hätte ich gerne eine Erklärung...:autsch:???:L


----------



## Final_Striker (16. Jan 2012)

Zeigt mal deinen Code wie du die Datenbank erstellst und die Tabellen anlegst.


----------



## KingEldarion (17. Jan 2012)

Also ich habe nun folgenden Quellcode in meiner start.java, in der ich alle erforderlichen Dateien für das Spiel laden möchte:

```
import javax.swing.*;

import org.h2.command.ddl.*;

import java.awt.*;
import java.sql.*;




public class Start extends JFrame
{
	 
      
      char exception;
      
      JLabel laden = new JLabel("Daten werden geladen, dies könnte einige Zeit dauern...");
      
      public Start()
      {
    	  setTitle("Lädt Crusade of Future!");
    	  setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    	  add(laden);
    	  
    	  
      }
      
      public static void main(String[]args)
      {
    	  Start frame = new Start();
    	  
    	  frame.setSize(1000, 500);
    	  frame.setResizable(false);
    	  frame.setVisible(true);
    	  
    	  Connection con = null;
    	  try{
    		  
    		  Class.forName("org.h2.Driver");
    	        Connection conn = DriverManager.
    	            getConnection("jdbc:h2:~/test", "sa", "");
    	       
    	        	CreateTable Spielerdaten;
    	        	
    	        	
    	        	
    	        conn.close();
    	        
    		  
    	  }catch(Exception e){
    		  Framestart startframeX = new Framestart();
    		  startframeX.error();
    	  }
    	  Framestart startframe = new Framestart();
    	  Start starter = new Start();
    	  frame.setVisible(false);
    	  
    	  startframe.menu();
      }
      
      
      
      
}
```

Das ist meine Start.java

Ich scheine damit eine Tabelle erzeugt zu haben, ob ich das wirklich habe, war auch eine Frage in einem vorherigen Post, nun weiß ich aber garnicht wie ich eine Tabelle füllen kann...


----------



## Final_Striker (17. Jan 2012)

Bis jetzt hast du ja nur eine Verbindung zur Datenbank aufgebaut.

Was ist mit der Klasse 
	
	
	
	





```
CreateTable Spielerdaten
```
 ?


----------



## EnHancEd[] (18. Jan 2012)

Wie wäre es mit dem Standard aber dennoch bestem Einstieg? :

Lesson: JDBC Basics (The Java™ Tutorials > JDBC(TM) Database Access)

Englisch solltest du jedoch beherrschen .


--


----------



## EnHancEd[] (18. Jan 2012)

Eine Tabelle erzeugst du mit:


```
CREATE TABLE "Tabellen_Name"
("Spalte 1" "Datentyp_für_Spalte_1",
"Spalte 2" "Datentyp_für_Spalte_2",
... )
```


Einfügen tust du deine Werte dann mit einem INSERT INTO Befehl.

--


----------



## KingEldarion (18. Jan 2012)

Muss ich dieses Appache runterladen?!

Ich hasse das allemöglichen Sachen runterzuladen und einzufügen, dass hat mich schon mit h2 genervt...


----------



## Final_Striker (18. Jan 2012)

> Muss ich dieses Appache runterladen?!



Nein brauchst du nicht, es sei denn, du willst eine Webanwendung schreiben.



> Ich hasse das allemöglichen Sachen runterzuladen und einzufügen, dass hat mich schon mit h2 genervt...


Aha, na dann musst du dir wohl eine eigene Datenbank schreiben, wenn du nicht runterladen  und einfügen willst.


----------



## KingEldarion (18. Jan 2012)

Ne habs jetzt so langsam kapiert, wobei das doch eigentlich voll der Schwachsinn ist und viel leichter gehen könnte...


----------



## EnHancEd[] (19. Jan 2012)

Du solltest erstmal die Grundlagen erlernen.. JDBC ist zwar mehr Arbeit am Anfang aber das solltest du schon beherrschen.. ich habe mit PostgreSQL angefangen als Datenbank.. ist Ansichtssache, die meisten nehmen MySQL.

--


----------



## HimBromBeere (19. Jan 2012)

Um in einem Programm (egal in welcher Sprache geschrieben) an einer Datenbak rumzudoktorn, brauchst du erstmal Zugriff auf dieselbe. Diesen holst du dir über einen Datenbanktreiber (sowas wie jdbc.postgresql.org oder so ähnlich), den du in den ClassPath inkludierst. Nun musst du innerhalb deines Programmes eine Verbindung zur Datenbak aufbauen, in dem du sowas angibst wie Datenbank, Nutzername, Passwort. Antwortet der Datenbankserver mit einer Zugriff-erlaubt-Nachricht (sprich es kommen keine Fehler), kannst du nun anfangen, SQL-Befehle auf diese (und nur diese) Datenbak abzufeuern (aber es gibt auch DBMS die das Handeln von mehreren Datenbaken gleichzeitig unterstützen...). 
Mehr brauchst du also gar nicht: Datenbank + Datenbanktreiber + Verbindungsparameter -->fertig



> Du solltest erstmal die Grundlagen erlernen.. JDBC ist zwar mehr Arbeit am Anfang aber das solltest du schon beherrschen..


SQL nicht zu vergessen, aber das wurde ja bereits erwähnt.


> ich habe mit PostgreSQL angefangen als Datenbank.. ist Ansichtssache, die meisten nehmen MySQL.


Ist ja Wahnsinn, endlich mal jemand. Ich hab schon immer gedacht, ich sei ein totaler Exentriker und irgendwie falsch gepolt.


----------



## KingEldarion (19. Jan 2012)

Also ich verstehe das so, man nimmt einen String, schreibt in diesen den SQL Befehl rein.

Erstellt ein neues Statement-objekt, diesem Statement-objekt gibt man nun den String in dem der SQL Befehl steht...

Dann führt man das statement in dem try-block aus.

Stimmt das soweit?


----------



## HimBromBeere (19. Jan 2012)

Schau dir das hier mal an, da wird alles ganz gut erklärt mit jeder Menge Code: SQL mit Java. 

Hast du überhauot schonmal erwähnt, mit welchem DBMS du arbeitest?


----------



## Gast2 (20. Jan 2012)

KingEldarion hat gesagt.:


> Also ich verstehe das so, man nimmt einen String, schreibt in diesen den SQL Befehl rein.
> 
> Erstellt ein neues Statement-objekt, diesem Statement-objekt gibt man nun den String in dem der SQL Befehl steht...
> 
> ...



Benutz doch einfach den TelepathicInputStream Tabelle 12.1
Java ist auch eine Insel – 12.3 Stream-Klassen und Reader/Writer
der kann daten über Telepathie an die DB senden


----------



## EnHancEd[] (20. Jan 2012)

KingEldarion hat gesagt.:


> Also ich verstehe das so, man nimmt einen String, schreibt in diesen den SQL Befehl rein.
> 
> Erstellt ein neues Statement-objekt, diesem Statement-objekt gibt man nun den String in dem der SQL Befehl steht...
> 
> ...



query nennt sich das i.d.R.

SQL an sich kannste schnell über MySQL page lernen meiner Erinnerung nach.
Wenn du das hast solltest du dich an die Basic s von JDBC machen.

Hybernate etc. kommt erst später.

Was wichtig ist zu erlernen, wie du Werte in Objekten "speicherst" bzw übergibst, diese in deiner Datenbank dann speicherst und Methoden schreibst wie du diese wieder aus der Datenbank gezielt rauskriegst.. Das nur so nebenbei.

Anbei der Link für SQL, mit dem man das gut erlernt und das auch noch auf DEUTSCH ist, ein Luxus:toll:

MySQL :: MySQL 5.1 Referenzhandbuch :: 13 SQL-Anweisungssyntax



Und zum Thema wie das aussehen sollte, in etwa so (Code-Ausschnitt):


```
List<City> cityList= new ArrayList<City>();
	   Connection conn= getConnection();
	   stmt= conn.createStatement();
       String query= "SELECT* FROM cities ORDER BY name";
	   ResultSet result= stmt.executeQuery(query);
	   
	   while(result.next()) {
          .
          .
          .   
        }
       return cityList;
      }
```

Aber bevor du das machst solltest du dich mit dem Thema COLLECTIONS befasst haben, eines der Wichtigsten in Java!


Gruß & viel Erfolg


----------



## KingEldarion (21. Jan 2012)

OK danke


----------



## JanHH (23. Jan 2012)

Das ist zwar nicht "voll der Schwachsinn", aber geht in der tat viel leichter: guggst Du JPA.


----------

