Daten über JDBC-ODBC Brigde auslesen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Daten über JDBC-ODBC Brigde auslesen

      Ich versuche gerade Daten aus einer MS Access-DB mit Java auszulesen. Geht unter Windows problemlos, unter Linux (Ubuntu Feisty Fawn) krieg ich folgende Exception beim Aufruf:
      java.sql.SQLException: [unixODBC][Driver Manager]Data source name not found, and no default driver specified
      at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
      at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
      at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3073)
      at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323)
      at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174)
      at java.sql.DriverManager.getConnection(DriverManager.java:582)
      at java.sql.DriverManager.getConnection(DriverManager.java:207)
      at MyConnection.getConnection(JDBCapp.java:43)
      at JDBCapp.main(JDBCapp.java:13)


      Hab bereits etwas gegoogelt und ein paar Threads diesbezüglich im Sun Developer Forum gefunden, die konnten mir allerdings leider auch net weiterhelfen.

      Hier der Code:

      Java-Quellcode

      1. import java.sql.Connection;
      2. import java.sql.Driver;
      3. import java.sql.DriverManager;
      4. import java.sql.ResultSet;
      5. import java.sql.Statement;
      6. class JDBCapp {
      7. static Connection theConn;
      8. public static void main (String args[]) {
      9. try {
      10. theConn = MyConnection.getConnection();
      11. ResultSet rs;
      12. Statement stmt;
      13. String sql;
      14. sql = "SELECT * FROM Categories";
      15. stmt = theConn.createStatement();
      16. rs = stmt.executeQuery(sql);
      17. while (rs.next()) {
      18. System.out.println(rs.getString("CategoryName"));
      19. }
      20. rs.close();
      21. stmt.close();
      22. } catch (Exception e) {
      23. e.printStackTrace();
      24. } finally {
      25. try {
      26. if (theConn != null) theConn.close();
      27. } catch (Exception e) {}
      28. }
      29. }
      30. }
      31. class MyConnection {
      32. public static Connection getConnection() throws Exception {
      33. String db = "./BugTypes.mdb";
      34. DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
      35. Driver d = (Driver)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
      36. Connection c = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+db);
      37. return c;
      38. }
      39. }
      Alles anzeigen
    • Naja das Problem scheint nicht direkt mit Java, sondern mit den ODBC-Treibern (für Access) zusammenzuhängen. Ich hab' aber ehrlich gesagt noch nicht wirklich eine Access "Datenbank" in Java eingebunden. Ich hab' mich da immer auf MySQL und Derby, das seit Java 6 standardmäßig mitgeliefert wird, beschränkt.
      Anyway, ein aptitude search mdb ergibt folgendes interessante Ergebnis:

      Quellcode

      1. libmdbodbc - MDB tools ODBC module

      Vielleicht hilft es das mal zu installieren.
    • Und wie wär's wenn du einfach das ganze Datenmodell + Inhalt in eine JavaDB (=Derby), oder SQLite oder MySQL Datenbank konvertierst? Mal ehrlich MS Access ist eine sehr schlechte Datenbank - wenn man das überhaupt Datenbank nennen kann. Wenn du irgendwas mit einem kleinen Footprint suchst, das du in eine GUI Anwendung einbetten willst, dann würd' ich dir JavaDB aka Derby empfehlen. Das Projekt ist wie gesagt in Java 6 enthalten und ist eine kleine Datenbank die genau für solche Zwecke geeignet ist.
    • Geht die Portierung mit Access selbst?
      Ich mach das für mein Praktikum, ich wäre nie so dämlich eine M$-Access DB zu verwenden :D
      Instabil, nicht Multi-User-Fähig - einfach scheiße!

      Muss ich die anderen DB-Systeme erst installieren? Das ist in der Firma nämlich nicht möglich. Java 5 ist an allen Rechnern installiert, soweit ich informiert bin.
      SQLite hätte ich übrigens schon mal ausprobiert, musste ich allerdings selbst beim JDK6 manuell installieren - und selbst dann ging's nicht :rolleyes:

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Christoph ()

    • Uff, das verkompliziert die Lage aber erheblich >__>". Ich weiß ja nicht wirklich wie deine Anforderungen sind aber eventuell wäre es eine Lösung über's Netzwerk eine MySQL Datenbank zu fahren auf die dann alle Clients zugreifen. Ob Windows dafür aber die ODBC-Treiber schon mitliefert oder ob es erlaubt ist die ggf. nachzuinstallieren ist natürlich eine andere Frage :/.

      Derby aka JavaDB ist leider die einzige Datenbank die direkt in Java enthalten ist, und das leider erst ab Version 6.0. Und selbst da musst du die DB iirc erst über eine Konsole irgendwie konfigurieren. Das Deployment würde also selbst in diesem Fall nicht ganz so einfach sein.

      Wenn alle Stricke reißen musst du eben Windows zumindest immer für's Testen in zB in einer VM verwenden.
    • Wird mir wohl nichts anderes übrig bleiben ...
      Aber ich hab gerade in einem Java-Forum gelesen dass man sich den Treiber für PostgreSQL als JAR-Datei downloaden kann. Gibt es eine Möglichkeit, bei der ich mit möglichst wenig Aufwand die Access-DB in eine PostgreSQL-DB umschnaxeln, und diese dann mit Java und auslesen kann?
    • Access Datenbanken kannst du mit den mdbtools in zum Beispiel MySQL oder CSV-Dateien exportieren. Damit sollte es auch möglich sein mit mehr oder weniger geringen Aufwand das ganze dann auch in eine Postgres Datenbank zu bekommen. Notfalls musst du halt das Schema händisch anlegen und dann mit einer Script- oder Programmiersprache deiner Wahl das ganze in Postgres importieren.
      Für Postgres gibts <hier> einen JDBC-Treiber. Damit brauchst du dann auch nicht mehr die JDBC-ODBC Bridge zu verwenden.