Also unter Windows funktioniert das Programm "einwandfrei".. jedoch unter Linux (Ubuntu und Damn Small Linux /je mit JRE 1.5) bekomm ich folgende exception:
Das Programm cddb ist ein Informatikprojekt (Schule) und ich bin daher gezwungen die Klasse Datenbankverbindung zu benutzen. Ich verstehe nur nicht warum ich unter Windows keine Fehlermeldung erhalte.
Datenbankverbindung sieht so aus:
Und die aktuelle Datenbank und den Treiber teile ich createVerbindung mit, indem ich
übergebe. Ich denke hier liegt irgendwie der Fehler. Ich kann aber gern noch zusätzlich den Code von Datenverarbeitung posten. CDDB sollte hierbei unwichtig sein. Ich habe schon zwei andere Programme getestet, wo ich jeweils die selbe Exception erhalte.
Vielen Dank,
r
Exception in thread "main" java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcDriver.initialize(JdbcOdbcDriver.java:436)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:153)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:193)
at Datenbankverbindung.createVerbindung(Datenbankverbindung.java:46)
at Datenverarbeitung.getCDName(Datenverarbeitung.java:203)
at CDDB.<init>(CDDB.java:499)
at CDDB.main(CDDB.java:524)
Das Programm cddb ist ein Informatikprojekt (Schule) und ich bin daher gezwungen die Klasse Datenbankverbindung zu benutzen. Ich verstehe nur nicht warum ich unter Windows keine Fehlermeldung erhalte.
Datenbankverbindung sieht so aus:
Code:
/**
* Die Klasse stellt Operationen zur Verwendung von Datenbanken mit Java zur
* Verfügung.
* Es handelt sich nicht um eine statische Klasse, es muss also eine Instanz
* der Klasse erzeugt werden. Dies hat den Vorteil, dass man auch mehrere
* Verbindungen erzeugen kann (was vor allem notwendig ist, wenn man mit
* verschiedenen Datenbanken in einem Projekt arbeitet).
* Neben der Herstellung einer Verbindung gibt es gegen Fehler abgesicherte
* Methoden zur Übergabe von SQL-Statements an die Datenbank.
* Nach der Erzeugung einer Datenbankverbindung mit {@link #createVerbindung}
* bleibt die Verbindung zur Datenbank so lange geöffnet, bis die Verbindung
* über {@link #closeVerbindung} geschlossen wird.
* Treten Fehler auf, werden diese auf der Konsole ausgegeben.
*
* @author Ehlert, Griep, Schilling, Blasek, Marwitz, Tischer, Krug
* @version 1.5 / 15.08.2004 / OSZ Informations- und Medizintechnik
*/
import java.sql.*;
public class Datenbankverbindung {
private Connection verbindung = null; // oder con
private Statement sqlSchnittstelle = null; // oder stmt
/**
* Konstruktor: Aufbau der JDBC-ODBC-Bridge.
*/
public Datenbankverbindung() {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} // try
catch (ClassNotFoundException e) {
System.out.println("Fehler bei JDBC-ODBC-Bridge: " + e.getMessage());
} // catch
} // Konstruktor
/**
* Baut eine Datenbankverbindung zu einer konkreten Datenbank auf.
*
* @param treiberUndDatenbasis In einem Wort, z.B.: "jdbc:odbc:vhsWedding"
*/
public void createVerbindung(String treiberUndDatenbasis) {
try {
verbindung = DriverManager.getConnection(treiberUndDatenbasis);
sqlSchnittstelle = verbindung.createStatement();
} // try
catch (SQLException e) {
System.out.println("Verbindungsfehler zur Datenbank: " + e.getMessage());
} // catch
} // createVerbindung
/**
* Baut eine Datenbankverbindung zu einer konkreten Datenbank auf.
*
* @param treiber Treiber der Datenbank, z.B.: "jdbc:odbc"
* @param datenbasis Datenbasis, z.B. "vhsWedding"
*/
public void createVerbindung(String treiber, String datenbasis) {
try {
verbindung = DriverManager.getConnection(treiber + ":"+ datenbasis);
sqlSchnittstelle = verbindung.createStatement();
} // try
catch (SQLException e) {
System.out.println("Verbindungsfehler zur Datenbank: " + e.getMessage());
} // catch
} // createVerbindung
/**
* Prueft, ob eine Verbindung zur Datenbank vorhanden ist.
*
* @return true, wenn eine Verbindung steht, false wenn nicht.
*/
public boolean isVerbindungAktiv() {
return (verbindung != null) && (sqlSchnittstelle != null);
} // isVerbindungAktiv
/**
* Beendet die Datenbankverbindung.
*/
public void closeVerbindung() {
try {
sqlSchnittstelle.close();
verbindung.close();
} // try
catch (SQLException e) {
System.out.println("Fehler bei der DB-Schließung:" + e.getMessage());
} // catch
} // closeVerbindung
/**
* Führt das übergebende SQL-Statement auf der Datenbank aus.
* Das Statement darf keine Datensätze zurückgeben, muss also ein
* Update, Delete oder Insert-Statement sein (oder ein SQL-DDL-Statement).
*
* @param sqlStatement das auszuführende SQL-Statement als String
* @return die Anzahl der geaenderten Datensaetze.
* Bei DDL-Statements wird i.d.R. 0 zurückgegeben.
*/
public int execDatenAenderung(String sqlStatement) {
int anzahl = 0;
try {
anzahl = sqlSchnittstelle.executeUpdate(sqlStatement);
} // try
catch (SQLException e) {
System.out.println("Fehler bei SQL-Statement: " + e.getMessage());
} // catch
return anzahl;
} // execDatenAenderung
/**
* Führt das übergebende SELECT-Statement als Abfrage auf der Datenbank aus.
* Das Statement muss Datensätze zurückgeben (muss also ein SELECT sein).
*
* @param sqlStatement das auszuführende SQL-Statement als String
* @return die Ergebnismenge der Abfrage {@link java.sql.ResultSet}
*/
public ResultSet execDatenAbfrage(String sqlStatement) {
ResultSet ergebnis = null;
try {
ergebnis = sqlSchnittstelle.executeQuery(sqlStatement);
} // try
catch (SQLException e) {
System.out.println("Fehler bei SQL-Abfrage: " + e.getMessage());
} // catch
return ergebnis;
} // execDatenAbfrage
} // Datenbankverbindung
Und die aktuelle Datenbank und den Treiber teile ich createVerbindung mit, indem ich
Code:
String derTreiberUndDieDatenbasis = "jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)}; DBQ="
+ System.getProperty("user.dir") + "/CDArchiv_DB.mdb";
Vielen Dank,
r