Windows: funzt -> Linux: Exceptions

Status
Nicht offen für weitere Antworten.

realzork

Mitglied
Also unter Windows funktioniert das Programm "einwandfrei".. jedoch unter Linux (Ubuntu und Damn Small Linux /je mit JRE 1.5) bekomm ich folgende exception:

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";
ü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
 

bronks

Top Contributor
Das ist merkwürdig. Probier mal folgendes: Installier unter Linux MsAccess und schau nach, ob alle Tabellen in der MDB-Datei vorhanden sind. :D

Das kann nicht funktionieren, weil Du auf Linux keinen AccessTreiber hast ...
 

realzork

Mitglied
danke bronks, hab mir auch schon überlegt ob es keinen treiber gibt, aber ich hab gedacht, sowas müsste doch in der jdbc:eek:dbc bridge von java drin sein?

und ja, access installieren wäre vielleicht ne möglichkeit.. nur wie? gibt doch kein office für linux oder irre ich mich? und mein normales office für windoof kann ich da ja kaum installieren.
 

bronks

Top Contributor
realzork hat gesagt.:
... und ja, access installieren wäre vielleicht ne möglichkeit.. nur wie? gibt doch kein office für linux oder irre ich mich? und mein normales office für windoof kann ich da ja kaum installieren.
Das war auch nur ein lustiggemeinter Spaß von mir :D Ich meine: Das klappt mit Linux nicht.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Dimax Hadoop : 2 SimpleNode cluster (eins mit windows und der andere mit opensuse) zu einem zusammenfügen. Datenbankprogrammierung 15
M Schichtplaner in Windows Kalender einbinden Datenbankprogrammierung 0
K Integrierte Windows Authentifizierung mit SQL-Datenbank Datenbankprogrammierung 3
D Script, um alle 5 secs den Windows Title abzuspeichern Datenbankprogrammierung 4
Kenan89 Windows 7 postgres komplett entfernen Datenbankprogrammierung 16
N Encoding UTF8 linux und windows Datenbankprogrammierung 1
G anbindung an sqlserver unter windows Datenbankprogrammierung 7
K INSERT INTO bei Windows 2005 SQL Server Standard Edition . Datenbankprogrammierung 2
W kostenlose SQL-DB für Windows, Mac und Linux Datenbankprogrammierung 10
Z jdbc-Verbundung unter Windows zur Postgresql DB sehr langsam Datenbankprogrammierung 3
L Installation des Treibers unter Windows XP Datenbankprogrammierung 10
N triggerfunction funzt nicht Datenbankprogrammierung 5
M insert befehl funzt nicht!wo ist der fehler? Datenbankprogrammierung 5
T insert funzt net richtig Datenbankprogrammierung 6
R wer kennt Sage - KHK ? ODBC funzt nicht ? Datenbankprogrammierung 9
S mysql funzt nicht Datenbankprogrammierung 2
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
Q Oracle Linux: ClassNotFoundException: oracle.jdbc.driver.OracleDriver Datenbankprogrammierung 6
E Access Datenbank, Linux Umgebung Datenbankprogrammierung 4
S Firebird NoClassDefFoundError trotz erfolgreichem Class.forName(...) unter Linux Datenbankprogrammierung 5
feuervogel SQLite unter Linux mit Eclipse einrichten Datenbankprogrammierung 8
D Datenbankanbindung unter Linux Datenbankprogrammierung 10
Z Verbindung unter Linux erstellen Datenbankprogrammierung 2
M Java + Linux + Datenbank = Umlauproblem Datenbankprogrammierung 2
A Access + Linux: geht das? Datenbankprogrammierung 7
G linux mysql keine verbindung Datenbankprogrammierung 8
F Suche JDBC-Treiber-Installationsanleitung (SUSE Linux) Datenbankprogrammierung 18
N Schritt für Schitt Tutorial für Java und JDBC unter Linux Datenbankprogrammierung 4
A MYSQL Datenbankzugriff unter Linux Datenbankprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben