# Excelsheet als Datenbank



## Foermchen82 (11. Nov 2006)

Hallo zusammen,

ich bin zwar nicht mehr ganz ein Java-Newbee, aber ich will jetzt auch mal etwas in verbindung mit Datenbanken entwickeln.

Meine Frage nun: ich hab bei mir auf dem Rechener keinen Datenbankserver installiert und habe das eigentlicha auch nicht vor. Bei .Net habe ich mal eine XLS-Datei eingebunden und gesehen, dass die sich wie Datenbanken verhalten.
Kann ich soezwas auch in JAVA realisieren und wenn ja wie?

Genauergesagt: ich will ein Excel-Sheet als kleine Datenbank verwenden(die date als DB und die einzelnen Sheets als Tabellen). Wie stell ich das an? Oder kann man auch anders eine kleine Datenbank simulieren ohne gleich nen Server aufzusetzen?

Danke im vorraus.


----------



## SnooP (11. Nov 2006)

ich glaube nicht, dass das ohne weiteres möglich ist... - aaaaaber was denkst du denn wie schwierig es ist ne db "aufzusetzen"?  ... also mysql ist umsonst und die installation beschränkt sich auf die Auswahl eines Verzeichnisses und unter umständen muss man noch mysqld starten manuell... vermutlich ist das installationsprogramm heute schon so weit, dass er automatisch nen windows-dienst installiert... fertig ist deine datenbank!
Um einfacher Tabellen und Datenbanken anlegen zu können, kann man bei mysql noch diverse guis runterladen - z.B. den Administrator oder den Query Browser...

danach kannst du mit Java JDBC mit der DB kommunizieren.

Ein weiterer Vorteil... es gibt bestimmt Zich Tutorials im Netz die das Szenario Java+Mysql besprechen...


----------



## Guest (11. Nov 2006)

OK ich bin überzeugt *g*.

Aber trotzdem würd ich gern wissen, wie ich XLS, bzw beo OpenOffice OSD-Dateien mithilfe eines Java-Programms auslesen bzw schreiben kann. Für exporte und importe z.b.


----------



## Foermchen82 (11. Nov 2006)

Sorry war nicht eingelogt.


OK ich bin überzeugt *g*.

Aber trotzdem würd ich gern wissen, wie ich XLS, bzw beo OpenOffice OSD-Dateien mithilfe eines Java-Programms auslesen bzw schreiben kann. Für exporte und importe z.b.


----------



## SnooP (11. Nov 2006)

von Apache gibt es das POI - eine API zum Auslesen von Office-Dateien und bei OpenOffice gibt es ne eigene API namens UNO... - kannst ja mal nach googlen.

Exporte und Importe bei Tabellen-Sheets gehen aber auch sehr simpel mit csv-Dateien, also einfache Textdateien mit mehreren Zeilen, und die Spaltenwerte sind mit Kommas getrennt.


----------



## bronks (11. Nov 2006)

Erstmal zu Problem: Java Excel API: http://prdownloads.sourceforge.net/jexcelapi/jexcelapi_2_5_7.zip?download



			
				SnooP hat gesagt.:
			
		

> ... also mysql ist umsonst ...


Sich in Mysql einzuarbeiten ist echt umsonst, denn man stellt schnell raus, daß man für den Produktivbetrieb Lizenzgebühren zahlen darf und zu den üblichen Persistenzmaschinen eine sehr beschränkte Kompatibilität besteht. Da empfehle ich eher eine wirklich kostenlose Datenbank, welche vom Funktionsumfang und Kompatibilität, den großen RDBMS entspricht: Postgres


----------



## SnooP (11. Nov 2006)

nunja... - sich einzuarbeiten klingt ja geradezu, als wäre es waaahnsinnig kompliziert. Ne Datenbank ist ne Datenbank, Mysql ist halt die erste freie gewesen, die mir eingefallen ist und letztlich ist es wohl ziemlich wumpe welche man da nimmt, wenn man mit JDBC drauf zugreifen kann...


----------



## bronks (11. Nov 2006)

SnooP hat gesagt.:
			
		

> ... ziemlich wumpe welche man da nimmt, wenn man mit JDBC drauf zugreifen kann...


Ja? Echt? Warum? Ich kann im Gegansatz zu Dir meine Aussagen begründen.


----------



## SnooP (11. Nov 2006)

Du meinst also, dass der OP einen signifikanten Unterschied bei der Benutzung der DBs merken wird? Das glaub ich nämlich nisch.
Und ich glaube ich finde auf Anhieb mehr Tutorials die mysql nutzen als postgre...
Das heißt nicht, dass nicht PostgreSQL als DB evtl. MySQL vorzuziehen wäre - ich halte es nur für ziemlich egal für einen Anfänger, welche DB er denn tatsächlich nimmt, da die Schnittstelle via JDBC und SQL quasi identisch ist. Das ist meine Meinung und ich gestatte dir auch eine andere zu haben.


----------



## Caffè Latte (11. Nov 2006)

Hi,

erst mal zum Problem selbst: auf Excel-Sheets kann man über die JDBC-ODBC-Brücke zugreifen:


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

public class InteractWithExcel {
	static final String DRIVER_NAME = "sun.jdbc.odbc.JdbcOdbcDriver";
	static final String DATABASE_URL = "jdbc:odbc:EXCELJDBCTest";
	public static void main(String[] args) {
		try {
			Class.forName(DRIVER_NAME);
			Connection conn = null;
			conn = DriverManager.getConnection(DATABASE_URL);
			Statement stmt = conn.createStatement();
			ResultSet rs =
				stmt.executeQuery("select State,Population from [Sheet1$]");
			while (rs.next()) {
				String state = rs.getString(1);
				int population = rs.getInt(2);
				System.out.println(state + " - " + population);
			}
			rs.close();
			stmt.close();
		} catch (ClassNotFoundException cnfe) {
			System.err.println("ClassNotFoundException Was Thrown");
			cnfe.printStackTrace();
		} catch (SQLException sqle) {
			System.err.println("SQLException Was Thrown");
			sqle.printStackTrace();
		}
	}
}
```

_EXCELJDBCTest_ ist der DSN, den du bei der ODBC-Einrichtung vergeben hast.

Wenn du Google bemühst findest du auch eine ganze Menge von Tools, die dir direkt den Zugriff auf die Datei erlaubt, ohne dass du eine ODBC-Datenquelle eingerichtet haben musst.

Im Übrigen: für den Einsatz eines MySQL-Datenbanksystems in kommerziellen Umgebungen ist keine Lizenzgebühr fällig. Nur für einen Wartungsvertrag muss man zahlen und wenn man Software verkauft, die MySQL beinhaltet.


----------



## bronks (12. Nov 2006)

SnooP hat gesagt.:
			
		

> ... ich halte es nur für ziemlich egal für einen Anfänger, welche DB er denn tatsächlich nimmt, da die Schnittstelle via JDBC und SQL quasi identisch ist. Das ist meine Meinung und ich gestatte dir auch eine andere zu haben.


Naja ... Zwischen Meinung und Wissen ist ein riesen Unterschied, deshalb sind mir Meinungen relativ egal. Ich weiß daß MySql für alles mögliche gut geeignet ist, aber für JavaApps die zweite Wahl darstellt. Ich weiß auch, daß MySql nicht kompatibel zu fast allen Persistenzmaschinen und EJB auf den gängigsten Servern ist, was gerade bei Java eine grosse Rolle spielt. Ich weiß, daß Postgres, IBM, Oracle, Microsoft, und die anderen bedeutenden Datenbanken, wie auch ein paar unbedeutendere diese Kompatibilität bieten.

MySql versteht OutOfTheBox nur seinen eigenen Dialekt und so fliegt man als Benutzer der o.g. bedeutenden Datenbanken schon bei einem Create voll auf die Fresse und muss in der Doku nachlesen um sich anschließend ans Hirn zu fassen. Die Schnittstelle via JDBC und SQL ist total verschieden und JavaEnterpriseServer haben große Probleme diesen Unterschied zu verdauen. 

Angeblich gibt es für MySql einen Kompatibilitätsmodus. Auf die schnelle habe ich in der Doku nichts davon gefunden. In den Foren wo die PhpGurus mit MySql beste Erfahrungen haben konnte mir zu diesem Kompatibilitätsmodus niemand etwas sagen, da uninteressant. In den JavaForen kennt den Kompatibilitätsmodus auch niemand, da bei auftretenden Problemen die meissten gleich zu einer anderen DB gegriffen haben.


----------



## bronks (12. Nov 2006)

Caffè Latte hat gesagt.:
			
		

> ... Im Übrigen: für den Einsatz eines MySQL-Datenbanksystems in kommerziellen Umgebungen ist keine Lizenzgebühr fällig. Nur für einen Wartungsvertrag muss man zahlen und wenn man Software verkauft, die MySQL beinhaltet.


Ja das ist schon richtig. MySql unter liegt der GPL. Von der GPL kann man sich freikaufen. In fast allen fällen sind die GPL harte Handschellen. Den zweiten o.g. Satz den Du geschrieben hast, kann man sich so hindrehen, wie man ihn haben möchte. Für einen JavaMenschen, der ein fertiges Produkt verkauft bedeutet es klar, daß mindestens der JDBC-Treiber vom Produkt beinhaltet wird.

Sogesehen ist MySql genauso gratis wie: Oracle, DB2, MS ...  Für Heim und Hobby kosten die alle nichts.


----------



## SnooP (12. Nov 2006)

Also ich konnte MySQL ohne Probleme in Verbindung mit EJBs (Entity Beans) über JBoss nutzen.

Und nochmal... für das was der OP machen will, reicht's alle mal... - aber ist ja auch egal


----------



## bronks (13. Nov 2006)

SnooP hat gesagt.:
			
		

> Also ich konnte MySQL ohne Probleme in Verbindung mit EJBs (Entity Beans) über JBoss nutzen.


Wenn Du auf JBoss mit EJB die Tabellen mit allen FK angelegt hast, dann nehmen ich alles zurück, aber dafür möchte ich sehr gerne wissen, wie Du das angestellt hast.



			
				SnooP hat gesagt.:
			
		

> Und nochmal... für das was der OP machen will, reicht's alle mal... - aber ist ja auch egal


Es gibt natürlich viele Sachen, die ausreichen; u.a. Derby und Hsql, aber was meinst Du mit OP?


----------



## SnooP (13. Nov 2006)

OP = OriginalPoster - Threadstarter, derjenige der das ganze aufgebracht hast == Foermchen82

und zu JBoss - ja hab ich auch mit FKs, die Komplexität hielt sich aber noch in Grenzen, war ne einfache Lagerverwaltungskiste - das ging in meiner Erinnerung auch recht gut, frag jetzt aber nicht nach Beweisen 

aber ich wollte auch nicht, dass das Foermchen EJB lernt, sondern erstmal mit einer DB connecten soll (mit welcher auch immer)... außerdem glaub ich nicht, dass durch die Verwendung eines mysql-treibers automatisch dein code unter gpl fällt... das könnte ja gar nicht, weil die Teile der Java-API momentan nicht gpl sind... du würdest also dinge automatisch unter eine fremde Lizenz stellen, die du gar nicht selbst geschrieben hast...

Momentan geht ja sogar die Rede um, dass Java unter GPL laufen soll... was aber nicht weiter tragisch wäre, da die Verwendung von bestimmten Komponenten ja nicht automatisch den GPL-Zwang erzeugt... - wenn du ein Programm unter Linux entwickelst, heißt das ja noch lange nicht, dass das Programm auch die GPL-Lizenz besitzen muss...

P.S. ist mysql eigentlich tatsächlich gpl? ich dachte die hätten eine der apache-lizenz ähnliche kiste...


----------



## bronks (13. Nov 2006)

Ahhh ... OriginialPoster ... hab ich noch nicht gewusst. 

Du hast sicher die Tabellen in der DB angelegt und dann erst entsprechende EJB, oder? Wenn ich die Tabellen durch EJB erstellen lasse, dann versteht MySql nicht was JBoss möchte.

Ich warne nur davor, denn wenn dann die Persistenzmaschine nicht mit der DB harmoniert, dann ist der Ärger groß. 

Das mit dem MySqlTreiber ist echt so. Entweder man kauft sich frei oder ist an die GPL gebunden. Wirf einen Blick in die LizenzVereinbarung von MySql und die GPL. Das was Du ansprichst würde der LGPL entsprechen.


----------



## SnooP (13. Nov 2006)

achso - jo... ich hab tatsächlich zuerst die tabellen erstellt... - andersrum hab ich mir noch nie gedanken drum gemacht 

also okay - wenn man ejb nutzen will, dann nicht mysql  - dennoch wollte das der OP *g* ja auch gar nicht... und das was er denn machen möchte ist mit allen DBs mehr oder weniger identisch... sooo unterschiedlich sind die SQL-Dialekte dann auch wieder nicht.

Das mit der gpl wusste ich jetzt so nicht... hätte ich also spontan falsch gemacht


----------



## bronks (13. Nov 2006)

Jetzt bin ich Deiner Meinung! 

Ich hab mich hier nur eingemischt, weil der OP gerade vor der Entscheidungsfrage steht und die zwei m.E. schwerwiegenden Punkte fast niemandem bekannt sind, welche bei der Entscheidungsfindung doch eine entscheidende Rolle spielen könnten.


----------

