【问题标题】:"No suitable driver" when running, but not in IDE运行时“没有合适的驱动程序”,但在 IDE 中没有
【发布时间】:2012-03-18 03:28:58
【问题描述】:

有人可以向我解释为什么以下代码在我在 Eclipse IDE 中运行应用程序时有效,但在服务器上编译和运行时会产生异常? 我就是不明白....

public class Database {
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;

    public Database() throws SQLException {
    String host = "localhost:3306";
    String schema = "stickmanDatabase";
    String user = "richard";
    String password = "xxxxxxxx";
    String url = "jdbc:mysql://" + host + "/" + schema + "?user=" + user + "&password=" + password;

    try {
        conn = DriverManager.getConnection(url);
    } catch (SQLException e) {
        e.printStackTrace();
        throw e;
    }
}
}

这是我得到的堆栈跟踪:

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/stickmanDatabase?user=richard&password=xxxxxxxx
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at stickmanPyramidScheme.server.Database.<init>(Database.java:23)
    at stickmanPyramidScheme.server.LoginVerification.verifyLogin(LoginVerification.java:10)
    at stickmanPyramidScheme.server.StickmanServer.parseAndExecute(StickmanServer.java:55)
    at stickmanPyramidScheme.server.StickmanServer.main(StickmanServer.java:32)

我的理解是问题是我需要构建路径中的文件“mysql-connector-java-5.1.18-bin.jar”,我这样做了。如果我删除它,运行时代码将不再有效在 Eclipse 中。

任何帮助将不胜感激。谢谢。

...

根据 Andrew 的要求...我在 Ubuntu Linux 服务器上使用 Eclipse。 我可以看到“mysql-connector-java-5.1.18-bin.jar”包含“com.mysql.jdbc”,其中包含“Driver.class” jar 被添加到(应用程序目录)/WEB-INF/lib 目录。仍然出现同样的错误。

【问题讨论】:

  • 请在错误输出中也使用代码格式。请注意使用格式更清晰(我编辑了您的问题)。
  • 根据下面的建议,我已经....添加了 Class.forName("com.mysql.jdbc.Driver"),移动了“mysql-connector-java-x.x.xx-bin.jar” " 文件放入 WEB-INF/lib 目录(与应用程序位于同一目录中)并将“mysql-connector-java-x.x.xx-bin.jar”添加到-classpath。这些都没有奏效,也没有我能想到的任何组合。我很困惑为什么这不起作用。
  • a -bin.jar 通常包含本地文件(例如 .dll.so 文件)。 AFAIU 用户 Jars 还应该包含一个仅用于类的 Jar,特别是 com.mysql.jdbc.Driver。您是否有允许您检查 Jars 内容的 IDE,或者您知道如何使用 SDK 工具列出内容?如果是这样,找到包含该类的 JAr,并将其添加到 WEB-INF/lib。另请注意 a) 最好编辑此类信息。将问题作为更新 b) 只有我会收到您的评论开始的通知.. “根据以下建议,..”
  • 尝试将mysql连接器文件(可以找到here)添加到您的构建路径中,执行此操作的教程是here。然后您需要做的最后一件事是检查您的 java 项目中是否有正确的导入(com.mysql.jdbc.Connection 而不是 java.sql.Connection)。

标签: java mysql eclipse


【解决方案1】:

您不仅需要 IDE 中的驱动程序 jar 文件,还需要将其安装在服务器上。你没有说这是什么类型的服务器,但是 jar 需要在你的服务器进程的类路径上;即,在您的 Web 应用程序的 WEB-INF/lib 目录中,或者只是在您的服务器 JVM 的 -classpath 参数中指示。

【讨论】:

    【解决方案2】:

    当您在 Eclipse 中运行该文件时,您的 jdbc 驱动程序位于您的项目类路径中。当您将其部署到服务器时,您还必须将其包含在其中。在 war/jar/ear 库或某些服务器库中。

    【讨论】:

      【解决方案3】:

      哥们,很简单,只需将“mysql-connector-java-x.x.xx-bin.jar”添加到“WEB-INF/lib”文件夹中

      【讨论】:

      • 我有文件,但我没有目录。该文件位于构建路径中,我在 Java 和 Eclipse 方面还不够新手,我认为它会将信息包含在 jar 中。
      【解决方案4】:

      DriverManager.getConnection(url);之前调用Class.forName("com.mysql.jdbc.Driver");

      因为 DriverManager 不知道 MySql Driver 。 Class.forName("com.mysql.jdbc.Driver") 将 MySql Driver 实现本身注册到 DriverManager。

      顺便说一句:它是“when running”而不是“when compiled”在您的问题标题中。

      【讨论】:

      • 我试过这个,以及 Class.forName("com.mysql.jdbc.Driver").newInstance()... 都没有解决问题。
      • 我在 java.net.URLClassLoader$1.run(Unknown Source) 上也遇到了未知来源错误。
      【解决方案5】:

      您需要在应用程序的 WEB-INF/lib 文件夹中添加 ojdbc14.jar 以及 mysql 连接器 jar。

      如果您还有其他问题,请告诉我。

      【讨论】:

        【解决方案6】:

        我发现了问题... 我的印象是 Eclipse 负责将所有文件放在一起,但我需要在 Manifest 中添加类路径。将其放入清单中有效,但添加 -classpath 选项或将其添加到我的 PATH 中都没有。

        任何有类似问题的人都应该注意,您需要将此添加到 Eclipse 创建的 jar 中的 MANIFEST.MF:

        Class-Path: /path/file.jar
        

        文件末尾有空行

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-14
          • 2013-12-21
          • 1970-01-01
          • 2011-04-14
          • 2013-01-29
          • 2021-06-11
          • 2020-06-25
          • 1970-01-01
          相关资源
          最近更新 更多