0

我真的在这里看到了一个谜。我在 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();
        }
    }
}

当我在 Eclipse 中运行它时,一切都很好。数据库和表都很好, Java Built Path中的库和身份验证都设置好了,我得到了我想要的结果,即“Hello World”,它是所选表中的一个字符串。

但是创建一个可执行的 JAR 文件并运行它会引发异常“此驱动程序未配置为集成身份验证”。它甚至没有连接,所以即使数据库中有错误,此时也没有关系。

更令人困惑的是,几周前,我还创建了一个可执行的 JAR 文件并且它工作了!

操作系统:Windows Vista 家庭高级版 x86

JDBC 驱动程序位置:“C:\sqljdbc_4.0\enu\sqljdbc4.jar”

本机库位置:“C:\sqljdbc_4.0\enu\auth\x86”

Java 版本:Java 7 更新 17 和 JDK 7 更新 17

以前,我使用更新 21,但我改回来检查驱动程序是否可能是原因。

那么,有什么建议吗?我将不胜感激!

4

2 回答 2

2
  • 检查 Eclipse 的运行时类路径,然后尝试创建一个系统级别的“CLASSPATH”变量并添加相同的路径。设置变量后,在新的命令提示符下执行它或重新加载环境变量

  • 确保您的可执行 jar 在 MANIFEST.MF 中具有所有必要 jar 的依赖项(以及 MainClass)

  • 最后,在 Java 中使用 Capital 的第一个字母(“Login”而不是“login”)始终是一种惯例

于 2013-05-19T05:52:54.813 回答
0

实际问题是,如果您从 Eclipse 运行项目,它将自动添加在运行/运行配置//参数中定义的运行参数,因此您可以使用正确设置的 sqljdbc_auth.dll 路径运行程序。但是,如果您将应用程序导出到 .jar 文件并运行它,您将收到这些错误,因为没有正确的类路径到 auth 文件。

因此,如果您使用正确的参数从命令行运行您的应用程序,它应该可以工作。

于 2013-08-23T20:19:03.733 回答