【发布时间】:2012-03-29 00:39:44
【问题描述】:
背景:开发要在 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) 行上得到一个空指针异常
这是堆栈跟踪:
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
【问题讨论】:
-
MS-Access 只能在 Windows 服务器上运行。
-
MS-Access 也是一个“桌面”数据库——而不是多用户数据库。如果您将访问权限暴露给网络,那么您将进入一个受伤的世界。帮自己一个大忙,将所有数据移动到真正的多用户数据库,如 Postgresql 或 MySql。
-
@GreyBeardedGeek 虽然我同意你的观点,但当其他人支付账单时,如果他们想要访问权限,他们就会获得访问权限、伤害世界等等。
标签: java database ms-access jdbc odbc