【发布时间】:2015-11-20 14:04:53
【问题描述】:
我有以下 JDBC 代码。我正在尝试创建一个dnsless 连接。
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
public class dummy {
public static void main(String[] argv) {
System.out.println("-------- Oracle JDBC Connection Testing ------");
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (ClassNotFoundException e) {
System.out.println("Where is your Oracle JDBC Driver?");
e.printStackTrace();
return;
}
System.out.println("Oracle JDBC Driver Registered!");
Connection connection = null;
try {
connection = DriverManager.getConnection(
"jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};DBQ=D:/abc.xls;");
} catch (SQLException e) {
System.out.println("Connection Failed! Check output console");
e.printStackTrace();
return;
}
if (connection != null) {
System.out.println("You made it, take control your database now!");
} else {
System.out.println("Failed to make connection!");
}
}
}
这个程序在下面的输出中运行良好。
-------- Oracle JDBC Connection Testing ------
Oracle JDBC Driver Registered!
You made it, take control your database now!
但我需要访问一个.xlsb 文件,并且当我更改时
connection = DriverManager
.getConnection("jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};DBQ=D:/abc.xls;");
到
connection = DriverManager
.getConnection("jdbc:odbc:Driver={Microsoft Excel Driver (*.xlsb)};DBQ=D:/abc.xlsb;");
我得到以下异常输出。
-------- Oracle JDBC Connection Testing ------
Oracle JDBC Driver Registered!
Connection Failed! Check output console
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at dummy.main(dummy.java:19)
请告诉我如何解决这个问题,我想使用dnsless connection。因为我有多个 Excel 表格要处理。
而且我所有的应用都是 32 位的。
谢谢
【问题讨论】:
-
您可以尝试安装Access Database Engine,然后看看是否可以使用
Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}。 (请注意,您必须安装与运行 Java 应用程序的 JVM 相同“位数”的驱动程序:32 位或 64 位。) -
嗨@GordThompson,感谢您戳戳这些
bitness,在写问题时错过了,我所有的应用程序都是32位的。更新了我的问题:) -
@GordThompson,只是想知道,这个 Access 数据库引擎是什么,我在部署我的应用程序时需要它吗?我也可以用这个减少 DNS 连接吗?
-
Access 数据库引擎包括用于处理 Office 应用程序中的数据的组件和驱动程序,包括 Access 数据库、Excel 文档以及一些其他格式(文本和 dBASE 文件)。如果您的应用程序使用它,那么它需要安装在部署您的应用程序的任何机器上。是的,它可以用于无 DSN 连接。
-
...还请记住,JDBC-ODBC 桥已从 Java 8 中删除,因此您的部署策略必须确保您的应用程序在 Java 7(或更早版本)JVM 下运行。