【问题标题】:jdbc connection fails while running the program from jar file从 jar 文件运行程序时 jdbc 连接失败
【发布时间】:2012-05-14 13:11:33
【问题描述】:

我有一个使用 JDBC 连接的应用程序。当我从 Eclipse 环境中运行它时,任何东西都没有问题,连接也没有。 但是,当我将它打包成可执行的 jar 文件并从命令行运行它时,同时调用该行

DriverManager.getConnection(url, user, password);

使用正确的凭据,应用程序将被冻结。 (错误的登录尝试一切正常 - 抛出 SQLServerException)。 我尝试使用不同的库选择创建 jar 文件,但结果是一样的。

谁能帮忙?

我使用 sqljdbc4.jar 库

我的数据库类的构造函数:

public Database(String url, String user, String password) throws SQLException, ClassNotFoundException {
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

    System.out.println("forname");
    connection = DriverManager.getConnection(url, user, password);
    System.out.println("get connection");
}

正确登录后不抛出异常,不打印“get connection”字符串(只打印“forname”字符串)

【问题讨论】:

    标签: sql-server jdbc jar connection deadlock


    【解决方案1】:

    您使用的是 Java 6 Update 29 吗?如果是,请更新到 Java 6 Update 30 或更高版本(最好是最新版本:Update 32)。该 Java 版本中存在导致 Microsoft SQL Server JDBC 驱动程序挂起的错误。

    【讨论】:

      【解决方案2】:

      “冻结”?您是否使用空的 catch 块捕获异常?

      我敢打赌,当您在 Eclipse 中运行时,JDBC 驱动程序 JAR 位于 CLASSPATH 中,但在您运行可执行 JAR 时却不在。将 Class-Path 添加到您的 JAR 清单中,并将所有 JAR 与您的可执行 JAR 放在一起。那应该这样做。

      【讨论】:

      • 不,它真的毫无例外地被冻结了。之前的类路径是我的问题(也发生了异常),但后来我用库打包了 jar,问题按照描述发生了变化。
      • 你发现异常了吗?我敢打赌它会扔一个,你只是不知道。将 JAR 放在可执行 JAR 中没有好处;您必须使用可执行 JAR 部署它们。
      • 是的,我正在捕获并打印异常,当登录失败时,确实会抛出异常。但是,当登录正确时,它确实会毫无例外地卡住。 “部署”是什么意思? Eclipse 导出到可运行 jar 有 3 个选项:提取、打包和复制所需的库。我都试过了,但结果都是一样的。
      • 我试图杀死 SQL Server,然后抛出异常。正确登录后的命令 DriverManager.getConnection(url, user, password) 确实等待到无穷大(或 SQL Server 关闭)。
      • 这个问题只发生在远程连接上。当我连接到计算机上的服务器时,一切正常。 (从Eclipse,远程连接也可以)
      猜你喜欢
      • 2012-11-15
      • 2019-08-01
      • 2012-09-18
      • 2018-06-22
      • 1970-01-01
      • 2017-12-20
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多