# Datenbanken mit MySQL einrichten



## ich² (8. Nov 2005)

Guten Morgen Forum,

ich würde gerne in meinem Java-Programm eine MySQL Datenbank nutzen (da diese ja kostenlos ist). Nur leider habe ich keine Ahnung von Nichts. Deswegen habe ich !erstmal! ein paar grundlegende Fragen:

- Was muss ich alles auf einem LOKALEN Rechner installieren, damit darauf eine MySQL-Datenbank läuft?
- Wo bekomme ich das ganze her?
- Wenn das Grundlegende (siehe 1.) installiert ist, kann ich dann mit Java auch einfach neue Datenbanken anlegen, oder muss ich das mit einem Manager machen?
- Was (und vorallem wie) installiere ich eine MySQL-Datenbank auf einen Server?
- Muss der Client auch etwas installiert haben um auf die Datenbank auf dem Server zuzugreifen, oder reicht das, wenn ich eine Abfrage mit meiner Java-Anwendung mache? (komplizierter ausgedrückt als ich es eigentlich meine )

Das wars erstmal. Sry für die Noob-haften Fragen, ich hab aber noch nie mit Datenbanken gearbeitet und auch kein Buch dazu.

mfg

ich²


----------



## Bleiglanz (8. Nov 2005)

-Was muss ich alles auf einem LOKALEN Rechner installieren, damit darauf eine MySQL-Datenbank läuft?

den mysql-server

- Wo bekomme ich das ganze her?

von http://www.mysql.de

- Wenn das Grundlegende (siehe 1.) installiert ist, kann ich dann mit Java auch einfach neue Datenbanken anlegen, oder muss ich das mit einem Manager machen?

ja, aber das ist mühsamm => verwende ein Tool

- Was (und vorallem wie) installiere ich eine MySQL-Datenbank auf einen Server?

genauso wie auf deinem lokalen rechner? OS-abhängig, im einfachsten fall "apt-get install mysql-server"

- Muss der Client auch etwas installiert haben um auf die Datenbank auf dem Server zuzugreifen, oder reicht das, wenn ich eine Abfrage mit meiner Java-Anwendung mache? (komplizierter ausgedrückt als ich es eigentlich meine icon_wink.gif) 

mit java: installiert nicht, aber man braucht den jdbc-Treiber (eine normale jar)


----------



## ich² (8. Nov 2005)

Schonmal vielen dank Bleiglanz, hab da noch ein paar Fragen:

- kann mir jemand ein gutes Tool zum Erstellen einer MySQL Datenbank empfehlen?
- wo bekomme ich den JDBC-Treiber her?
- wie muss ich den JDBC-Treiber "einbauen"?
- wenn ich theoretisch mit Java und ohne Tool eine Datenbank erstellen wollte, könnte ich dass dann auch machen ohne mysql Server zu installieren, sondern nur mit dem JDBC-Treiber?

mfg

ich²


----------



## AlArenal (8. Nov 2005)

Bleiglanz hat gesagt.:
			
		

> - Was (und vorallem wie) installiere ich eine MySQL-Datenbank auf einen Server?
> 
> genauso wie auf deinem lokalen rechner? OS-abhängig, im einfachsten fall "apt-get install mysql-server"



Also "emerge mysql" schreibt sich doch deutlich kürzer..  LOL
Immer diese Debian-Fritzen.. tse...


----------



## Bleiglanz (8. Nov 2005)

- kann mir jemand ein gutes Tool zum Erstellen einer MySQL Datenbank empfehlen?

http://dev.mysql.com/downloads/administrator/

http://www.phpmyadmin.net/home_page/index.php

- wo bekomme ich den JDBC-Treiber her?

http://dev.mysql.com/downloads/connector/j/3.1.html

- wie muss ich den JDBC-Treiber "einbauen"?

indem du die .jar in den Classpath aufnimmst

- wenn ich theoretisch mit Java und ohne Tool eine Datenbank erstellen wollte, könnte ich dass dann auch machen ohne mysql Server zu installieren, sondern nur mit dem JDBC-Treiber? 

nein, der Treiber ist nur eine "Zugriffschicht", ohne Datenbank kannst du auch keine Datenbank erstellen


----------



## Dukel (8. Nov 2005)

ich² hat gesagt.:
			
		

> Guten Morgen Forum,
> 
> ich würde gerne in meinem Java-Programm eine MySQL Datenbank nutzen (da diese ja kostenlos ist). Nur leider habe ich keine Ahnung von Nichts. Deswegen habe ich !erstmal! ein paar grundlegende Fragen:
> [...]
> ich²



Btw. es gibt auch noch andere kostenlose Datenbanken.
http://www.postgresql.org/
http://firebird.sourceforge.net/
...
Oracle als komplett freie etwas eingeschränkte und im nichtkommerziellen und nicht produktiven Bereich die große DB.



			
				AlArenal hat gesagt.:
			
		

> [...]
> Immer diese Debian-Fritzen.. tse...



Mein FC hat auch ein apt-get.


----------



## ich² (8. Nov 2005)

So, bin jetzt daheim und versuch das ganze gerade mal. Ich arbeite mich dafür durch das Tutorial in Java ist auch nur eine Insel. Hab mir jetzt folgenden Code zusammengebastelt:


```
import java.sql.*;

public class MySQL {
	
	String sql = null;
	
	public MySQL() {
		
		try	{
			Class.forName(DatabaseConstants.DRIVER);
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
		}
		catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		try {
			Connection con = DriverManager.getConnection(DatabaseConstants.PROTOCOL);
			Statement stmt = con.createStatement();
			stmt.addBatch("INSERT INTO test VALUES (0,'Produkt')");
			stmt.executeBatch();
		}
		catch (SQLException e) {
			System.out.println(e);
		}
	}
	
	public static void main(String[] args) {
		
		MySQL mysql = new MySQL();
	}
}
```


```
public final class DatabaseConstants {
	
	public static final String DRIVER = "com.mysql.jdbc.Driver";
	public static final String PROTOCOL = "jdbc:msql://localhost:3306/nato_test";
	public static final String DATABASE = "OpenGeoDB;create=true";
	public static final String URL      = PROTOCOL + DATABASE;
	public static final String USER     = "root";
	public static final String PASS     = "nato";
}
```

Nur bekomme ich jetzt die Fehlermeldung, dass er den Treiber nicht finden kann.

Eine Datenbank müsste ich haben, da ich mit dem MySQL Administrator mir ein Schema angelegt habe (dass ist doch eine Datenbank!?) und darunter die Tabelle test mit den Felder Produkt_ID als PrimaryKey (Integer) und Produkt (Varchar). Was mache ich falsch?

mfg

ich²


----------



## Guest (8. Nov 2005)

AlArenal hat gesagt.:
			
		

> Bleiglanz hat gesagt.:
> 
> 
> 
> ...


Gentoo oder FreeBSD?


----------



## ich² (8. Nov 2005)

ok, hat sich erledigt. Der Path von der IDE (den normalen hatte ich gesetzt) war nicht gesetzt  :autsch: .

@ bleiglanz thx.

@ rest wollte eigentlich schon MySQL benutzen

kennt noch jemand ein gutes Tutorial?

mfg

ich²


----------



## ich² (8. Nov 2005)

Ich versuche nun ganz einfach in eine vorher erstellte tabelle (tblprodukte) in der Datenbank natoshop Daten einzuspielen und wieder zu lesen. Nur leider bekomme ich eine NullPointerException in Zeile 33


```
import java.sql.*;
import java.net.*;
import java.util.*;

public class SQLConnection {
	
	Connection conn = null;
	Statement stmt = null;
	ResultSet rs = null;
	
	public SQLConnection() {
		
		// Treiber laden
		try { 
		    Class.forName("com.mysql.jdbc.Driver");
		} 
		catch(ClassNotFoundException e) { 
		    e.printStackTrace();
		}
		// Connection erstellen und Statement zuweisen
		try {
            Connection conn = DriverManager.getConnection(ConnectDetails.CONNECTION + ConnectDetails.DATABASE + "?user=" + ConnectDetails.USER + "&password=" + ConnectDetails.PASSWORD);
            Statement stmt = conn.createStatement();
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
	}
	
	public void executeSQL(String sql) {
		
		try {
			stmt.addBatch(sql);
			stmt.executeBatch();
		}
		catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public Vector executeQuery(String query, int[] colums) {
		
		Vector temp = new Vector();
		try {
			rs = stmt.executeQuery(query);
			while (rs.next()) {
				for (int i : colums) {
					temp.add(rs.getString(i));
					System.out.println(rs.getString(i));
				}
			}
		}
		catch (SQLException e) {
			e.printStackTrace();
		}
		return temp;
	}
}
```


```
public final class ConnectDetails {
	
	public final static String CONNECTION = "jdbc:mysql://localhost/";
	public final static String DRIVER = "com.mysql.jdbc.Driver";
	public final static String DATABASE = "natoshop";
	public final static String USER = "zensiert";
	public final static String PASSWORD = "zensiert";
}
```


```
import java.util.*;

public class TestSQL {
	
	SQLConnection sqlc = new SQLConnection();
	Vector vec = new Vector();
	
	public static void main(String[] args) {
		
		TestSQL tsql = new TestSQL();
		int[] integ = {1, 2, 3};
		tsql.sqlc.executeSQL("INSERT INTO tblprodukte VALUES (2, 'Produkt', 30, 45)");
		tsql.vec = tsql.sqlc.executeQuery("SELECT * FROM tblprodukte", integ);
		for (int i = 0; i < tsql.vec.size(); i++) {
			System.out.println(tsql.vec.elementAt(i).toString());
		}
	}
}
```

Woran liegt das? Müsste doch eigentlich alles stimmen!?

mfg

ich²


----------



## Bleiglanz (9. Nov 2005)

Statement stmt = conn.createStatement(); 

die lokale Variable stmt, die du neu erzeugst verdeckt die gleichnamige Member Variable

also this.stmt schreiben


----------



## ich² (9. Nov 2005)

danke, werds daheim mal ausprobieren, aber warum ist das so? Ich habe doch nur eine Variable!? Und was müsste ich machen, damit ich nicht this.stmt schreiben muss?

mfg

ich²


----------

