# Datenbank.aber wie?



## Tomate_Salat (15. Feb 2009)

Hi @ all,

Ich bin noch recht neu in Java und versuche mich da eigentständig weiterzubilden. Leider helfen mir meine Quellen da nicht wirklich weiter . Ich will als nächstes Projekt ein Programm schreiben, indem ich Tickets hinterlegen kann. Das ganze soll zusätzlich mit Benutzer und deren Rechten arbeiten. Hier würde sich ja MySQL anbieten. Dennoch verstehe ich nicht wirklich wie ich das reallisieren sollte. Zudem würde mich weiter interessieren: Welche Datenbank bietet sich bei Java an, die man mit dem Programm mitliefert[oder die sich erst nach dem ersten Programm-start selber erstellt]. Also z.B. nach Programmstart legt er die Datei "datenbank.db" an und die ich dann füllen kann.

Also noch mal kurz zusammengefasst:
1) Wie baue ich eine Verbindung zu MySQL auf
2) Welche Datenbank ist zu empfehlen, die sich bei erstem Programmstart selber anlegt[also auch die datei]

MFG
     Tomate_Salat


----------



## musiKk (15. Feb 2009)

1. In Java geht das generell über JDBC-Treiber. Für MySQL gibt es natürlich auch einen.
2. JavaDB (Derby) oder H2.

Das MySQL-Zeugs und Derby sind sehr umfangreich dokumentiert. H2 sicher auch, mit dem hab ich aber noch nicht gearbeitet.


----------



## Tomate_Salat (15. Feb 2009)

iwie scheint mir, H2 ist ähnl. wie MySQL. Was ich meine: wer vllt php kennt: mit sqlite_open(); konnte man eine sqlite-db-datei erstellen und soetwas will ich auch bei java nutzen können


----------



## Gelöschtes Mitglied 5909 (15. Feb 2009)

Java ist kein PHP und mich würd mal intressieren was des dann ist. Eine vernünftige DB wohl kaum, eher ne CSV datei...

Ein Simples Beispiel mit h2, um eine Datenbank sinnvoll und einfach zu nutzen empfiehlt es sich aber ein OR Mapper wie JPA/Hibernate oder IBatis zu verwenden:


```
// H2ObjectDatabase.java
// Project: h2o
// Author: Liar
// 28.05.2008 20:50:04

package h2o;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.h2.jdbcx.JdbcDataSource;

/**
 * @author Liar
 */
public class H2ObjectDatabase {

	public final static int		CACHE_SIZE	= 10000;

	private final static String	CREATE		= "CREATE TEMPORARY TABLE IF NOT EXISTS TEMPORARY_OBJECTS (OBJECT OTHER)";
	private final static String	INDEX		  = "CREATE INDEX IF NOT EXISTS OBJECT_INDEX ON TEMPORARY_OBJECTS(OBJECT)";

	private final static String	INSERT		= "INSERT INTO TEMPORARY_OBJECTS(OBJECT) VALUES(?)";

	private final static String	CLEAR		  = "DROP ALL OBJECTS DELETE FILES";

	private final static String	SELECT		= "SELECT OBJECT FROM TEMPORARY_OBJECTS";


	private Connection			connection;
	private int					cache;

	public H2ObjectDatabase( int cacheSize ) {
		cache = cacheSize;
	}

	public H2ObjectDatabase() {
		this(CACHE_SIZE);
	}

	public void init() throws SQLException, ClassNotFoundException {
		Class.forName("org.h2.Driver");
		JdbcDataSource datasource = new JdbcDataSource();
		datasource.setURL("jdbc:h2:file:~/.h2/data;CACHE_SIZE=" + cache);
		datasource.setUser("SA");
		datasource.setPassword("");
		connection = datasource.getConnection();
	}

	public void create() throws SQLException {
		PreparedStatement preparedStatement = connection.prepareStatement(CREATE);
		preparedStatement.execute();
		preparedStatement.close();
		preparedStatement = connection.prepareStatement(INDEX);
		preparedStatement.execute();
		preparedStatement.close();
	}

	public void insert( Object object ) throws SQLException {
		PreparedStatement preparedStatement = connection.prepareStatement(INSERT);
		preparedStatement.setObject(1, object);
		preparedStatement.execute();
		preparedStatement.close();
	}

	public ResultSet select() throws SQLException {
		PreparedStatement preparedStatement = connection.prepareStatement(SELECT);
		return preparedStatement.executeQuery();
	}

	public void clear() throws SQLException {
		PreparedStatement preparedStatement = connection.prepareStatement(CLEAR);
		preparedStatement.execute();
		preparedStatement.close();
	}

	public void close() throws SQLException {
		connection.close();
	}

}
```


----------



## Tomate_Salat (15. Feb 2009)

klar dass das kein php ist ^^. Aber ich hätte gerne soetwas in der Art und da H2 anscheinend einen Server hat, ist es glaube ich nicht dass, nachdem ich suche. Also das ganze sollte schon Portable sein


----------



## Guest (15. Feb 2009)

Tomate_Salat hat gesagt.:
			
		

> klar dass das kein php ist ^^. Aber ich hätte gerne soetwas in der Art und da H2 anscheinend einen Server hat, ist es glaube ich nicht dass, nachdem ich suche. Also das ganze sollte schon Portable sein


H2 kann auch als Embeded DB verwendet werden. Also, das was du suchst.
Schau dir vielleicht das hier an: http://www.h2database.com/html/jaqu.html


----------



## Gelöschtes Mitglied 5909 (15. Feb 2009)

h2 läuft entweder nur im hauptspeicher ab (ohne persistenz) im embedded file mode, im server oder im cluster mode.

Näheres http://www.h2database.com/h2.pdf seite 33


Edit @ meinen vorhänger: JaQu ist ne zugriffsapi aber hat mit der datenbank an sich nix zu tun. AUßerdem ist des noch nicht stable wenn ich das richtig sehe


----------

