我真的在这里看一个谜。我在Eclipse中创建了一个Java程序并建立了一个JDBC连接。代码如下:
import java.sql.*;
public class Login {
public static void main(String[] args) {
try {
// Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection connection = DriverManager
.getConnection("jdbc:sqlserver://localhost;databaseName=testdb; integratedSecurity=true;");
//adding port 1433 doesn't make a difference
System.out.println("Connection successful");
Statement st = connection.createStatement();
ResultSet rs = st.executeQuery("select * from testtable");
while (rs.next()) {
line = rs.getString(2);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
当我在日食中运行时,一切都很好。数据库和表格都很好,设置了 Java Built Path 中的库和身份验证,我得到了我想要的结果,即“Hello World”,它是所选表中的一个字符串。
但是创建一个可执行的JAR文件并运行它会引发异常“此驱动程序未配置为集成身份验证”。它甚至没有连接,因此即使数据库中存在错误,此时也无关紧要。
事实上,更令人困惑的是,几个星期前,我还创建了一个可执行的JAR文件并且它有效!
操作系统:Windows Vista Home Premium x86
JDBC驱动程序位置:“C:\ sqljdbc_4.0 \ enu \ sqljdbc4.jar”
原生库位置:“C:\ sqljdbc_4.0 \ enu \ auth \ x86”
Java版:Java 7 Update 17和JDK 7 Update 17
以前,我使用的是Update 21,但我改回来检查是否有驱动程序。
那么,有什么建议吗?我将非常感激!
答案 0 :(得分:2)
检查eclipse的运行时类路径,然后尝试创建系统级“CLASSPATH”变量并添加相同的路径。设置变量后,在新的命令提示符中执行它或重新加载环境变量
确保您的可执行jar在MANIFEST.MF中具有所有必需的jar(以及MainClass)的依赖关系
最后,在Java中创建第一个字母表(“登录”而不是“登录”)始终是Java中的一种做法
答案 1 :(得分:0)
实际问题是,如果从eclipse运行项目,它将自动添加在run / run config // arguments中定义的运行参数,因此您可以使用正确设置的sqljdbc_auth.dll路径运行程序。但是,如果将应用程序导出到.jar文件并运行它,则会出现这些错误,因为auth文件没有正确的类路径。
因此,如果您使用适当的参数从命令行运行您的应用程序,它应该正常工作。