Koneksi Driver ODBC JDBC

Saat ini saya sedang mengerjakan proyek untuk kelas di Universitas saya. Saya sedang belajar tentang menghubungkan dan memanipulasi database dan kami menggunakan file Microsoft .accdb.

Inilah yang saya miliki sejauh ini.

/* Perform database operations */
    try {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        System.out.println("Driver loaded");

        connection = DriverManager.getConnection("jdbc:odbc:Lab3.accdb");
        System.out.println("Database connected");

        statement = connection.createStatement();

        ResultSet resultSet = statement.executeQuery("");

        while (resultSet.next()) {
            output.write("<p>" + resultSet.getString(1) + "\t" +
                resultSet.getString(2) + "\t" + resultSet.getString(3) + "</p>");
        }

        connection.close();
    } catch (ClassNotFoundException|SQLException e) {
        System.out.println("Database Access Error.");
        e.printStackTrace();
    }

Ketika mencari "sun.jdbc.odbc.JdbcOdbcDriver" Saya mendapatkan output berikut.

SEVERE:   java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1761)
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1611)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:190)
at changepass.ChangePasswordServlet.processRequest(ChangePasswordServlet.java:47)
at changepass.ChangePasswordServlet.doGet(ChangePasswordServlet.java:83)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)
at java.lang.Thread.run(Thread.java:744)

Tampaknya cukup sederhana untuk dikerjakan. Sepertinya saya kehilangan driver atau sesuatu di sepanjang garis tersebut. Namun saya kesulitan menemukan apa yang harus saya lakukan tentang hal ini. Apakah driver disertakan dengan JDK di mana saja? Apakah saya harus mengunduh sesuatu yang terpisah? Apakah itu tergantung pada Sistem Operasi saya? (Mac OS X 10.9). Atau apakah saya hanya melakukan sesuatu yang salah dalam kode?

Saya akan sangat menghargai bantuannya! Terima kasih!

Info Tambahan:

[James@toodarkpark: ~]$ java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
[James@toodarkpark: ~]$ 
Larutan

Seperti yang disebutkan dalam komentar untuk pertanyaan tersebut, JDBC-ODBC Bridge - seperti yang ditunjukkan namanya - hanya mekanisme untuk lapisan JDBC untuk "berbicara dengan &" lapisan ODBC. Bahkan jika Anda memiliki JDBC-ODBC Bridge pada Mac Anda, Anda juga perlu memiliki

  • implementasi ODBC itu sendiri, dan
  • driver ODBC yang sesuai untuk basis data target (ACE/Jet, a.k.a. "Access")

Jadi, bagi kebanyakan orang, menggunakan teknologi JDBC-ODBC Bridge untuk memanipulasi database ACE/Jet ("Access") benar-benar merupakan pilihan praktis hanya di bawah Windows. Penting juga untuk dicatat bahwa JDBC-ODBC Bridge akan</strike> telah dihapus di Java 8 (ref: di sini).

Ada cara lain untuk memanipulasi database ACE/Jet dari Java, seperti UCanAccess dan Jackcess. Keduanya adalah implementasi Java murni sehingga mereka bekerja pada platform non-Windows. Untuk detail tentang bagaimana menggunakan UCanAccess lihat

Memanipulasi database Access dari Java tanpa ODBC

Komentar (0)

Tidak bekerja dengan ODBC-Bridge untuk saya juga. Saya mendapatkan cara untuk menginisialisasi koneksi ODBC menggunakan driver ODBC.

 import java.sql.*;  
 public class UserLogin
 {
     public static void main(String[] args)
     {
        try
        {    
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

            // C:\\databaseFileName.accdb" - location of your database 
           String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + "C:\\emp.accdb";

            // specify url, username, pasword - make sure these are valid 
            Connection conn = DriverManager.getConnection(url, "username", "password");

            System.out.println("Connection Succesfull");
         } 
         catch (Exception e) 
         {
            System.err.println("Got an exception! ");
            System.err.println(e.getMessage());

          }
      }
  }
Komentar (0)