2014年3月3日 星期一

Java 程式連線 ACCESS 資料庫問題

我辦公室的 Win7 (64 位元) 跟 DELL Win7 (32 位元) 筆電無法執行 JDBC-ODBC 資料庫連線 :

公司 Win7 64 bits :

G:\Java\test>java access
java.sql.SQLException: [Microsoft][ODBC 驅動程式管理員] 找不到資料來源名稱且未指
定預設的驅動程式

DELL 筆電 Win7 32 bits :

F:\Java\test>java access
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] '(unknown)' is
not a valid path.  Make sure that the path name is spelled correctly and that yo
u are connected to the server on which the file resides.

在 "jdk x86_64的不能使用JDBC-ODBC吗" 這篇提到, 移除 JDK x64 版, 改安裝 JDK x86 版後就可以連接 ACCESS 資料庫了. 檢查 Java 版本確認目前是 JDK 64 位元版本 :



若不移除 JDK x64, 但加安裝 JRE x86, 然後將 PATH 設為 JRE x86 是否也可以呢 ? 下載安裝 32 位元 JRE 後, 到 "控制台/系統" 修改環境變數, 把 JAVA_HOME 變數由 JDK 改為 JRE :


測試結果還是不行, 而且 javac 變成無法執行了 (因為 JRE 只能執行 Java, 無法編譯 Java). 我把 JDK7 64 位元移除後, 下載 JDK7 X86 安裝, 結果還是一樣無效. 無解了, 打算放棄在 64 位元上存取 ACCESS.

2014-03-06 補充 :

今天下午再次測試 access.java, 驚訝地發現竟然可以耶! 差別只是下班關機而已, 難道是要重新啟動才有效嗎? 下午到樓上辦公室找到一台 32 位元 Win7, 有安裝 JRE X86, 也可以執行.


可見 Java 版本已改為 32 位元 X86, 成功地從 test.mdb 讀取資料. 資料表 users 結構如下 :


測試範例1 :  http://mybidrobot.allalla.com/javatest/access-odbc.zip  [ 看原始碼] 

import java.sql.*;
import java.sql.SQLException;
import java.sql.ResultSet;

public class access {
  public static void main(String[] args) {
    try {
       ResultSet rs = null;
       Connection conn = null;
       Statement stat = null;
       String strSql = "";

       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
       String db="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};" +
                 "DBQ=test.mdb;DriverID=22;READONLY=false}";
       conn = DriverManager.getConnection(db ,"","");
       stat = conn.createStatement();

       try {
            strSql = "select top 10 * from users";
            rs = stat.executeQuery(strSql);
            while (rs.next()){
                   System.out.println(rs.getString("name"));
                   }
            }
       catch (SQLException e) {System.out.println(e);}
       catch (NullPointerException e) {System.out.println(e); }
       catch (Exception e) {System.out.println(e);}
       }
    catch(Exception e) {System.out.println(e);}
    }
  }


JAVA_HOME :
C:\Program Files\Java\jdk1.7.0_40
C:\Program Files (x86)\Java\jdk1.7.0_51
C:\Program Files (x86)\Java\jre7

# [Java EE]Win7 64位元JSP連Access解決方法
Java MS Access Connection
jdk x86_64的不能使用JDBC-ODBC吗
Java Essence: 你執行的是哪個 JRE?
在win7及java 64bits 環境下 使用 JSP 連接 ACCESS (試過無效)
# Windows7(64bit) ODBC Access Driver 連結設定

沒有留言 :