JDBC连接在IDE(eclipse)中工作,但不在.jar文件中工作

时间:2013-05-19 01:39:14

标签: java sql-server eclipse jdbc jar

我真的在这里看一个谜。我在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,但我改回来检查是否有驱动程序。

那么,有什么建议吗?我将非常感激!

2 个答案:

答案 0 :(得分:2)

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

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

  • 最后,在Java中创建第一个字母表(“登录”而不是“登录”)始终是Java中的一种做法

答案 1 :(得分:0)

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

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