使用jdbc访问(.mdb)数据库操作

时间:2012-03-29 00:39:45

标签: java database ms-access jdbc odbc

背景:处理要在Network Solutions托管的Apache服务器上运行的应用程序。朋友/客户坚持使用Access数据库而不是SQL数据库。

当前问题:在我首先编写整个后端之前,写了一个Java测试程序以确保我可以连接到数据库。当我在apache服务器的JVM上运行此代码时,将托管最终产品:

import java.sql.*;
import java.io.*;
public class test {
    public static void main(String[] args) {
        try {
            Class driverClass = Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            DriverManager.registerDriver((Driver) driverClass.newInstance());

            // set this to a MS Access DB you have on your machine
            String filename = new File(".").getCanonicalPath() + "/ITEMS.mdb";


            String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";
            database+= filename.trim(); // add on to the end 
            // now we can get the connection from the DriverManager

            System.out.println(database);

            Connection conn = DriverManager.getConnection( database );
        } catch (Exception e) {
            System.out.println("Error: " + e.getMessage() + " " + e.getLocalizedMessage());
            e.printStackTrace();
        }
    }
}

我在Connection conn = DriverManager.getConnection(database)

行上得到一个空指针异常

这是stacktrace:

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:582)

        at java.sql.DriverManager.getConnection(DriverManager.java:207)

        at test.main(test.java:20)

要编写此测试,我将此作为我的主要来源:http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=2691&lngWId=2

2 个答案:

答案 0 :(得分:0)

String strconnect="jdbc:odbc:DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ="
Sring filename="some path";
StringBuilder a =new StringBuilder();
a.append(strconnect);
a.append(filename);
String db = a.toString();   
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c= DriverManager.getrConnection(db,"","")
Statement stmt = c.createStament();
String query = "some query";
stmt.executeQuery(query);
c.close();

永远不要获取规范路径,指定访问文件的路径或使用JFile Explore并获取路径

也不要忘记关闭连接

答案 1 :(得分:-1)

既然你提到了apache,我会假设服务器正在运行Linux或BSD 在这种情况下,请查看以下内容:

Linux上没有提供Access的默认驱动程序,除非你安装了JDBC ODBC,否则JDBC ODBC将无法运行。

除非使用Access数据库作为Linux服务器上网站的后端有一个非常特殊且压倒性好的原因,否则请告诉您的朋友,这在技术上甚至在经济上并不一致。 / p>

如果您需要服务器上的轻量级数据库,请使用SQLite:它是免费的,有connecting to it from Java in linux的良好支持,有良好的工具(甚至是browser plugins),你可以如果您的朋友希望偶尔获得一次Access备份,请始终convert that database to Access

否则,像所有人一样去寻找PostgreSQL或MySQL(通常是有充分理由的。)