Java &引用;“没有合适的司机”;运行时,但不在IDE中
有人能给我解释一下为什么我在EclipseIDE中运行应用程序时,下面的代码可以工作,但在服务器上编译和运行时,它会生成异常? 我就是不明白Java &引用;“没有合适的司机”;运行时,但不在IDE中,java,mysql,eclipse,Java,Mysql,Eclipse,有人能给我解释一下为什么我在EclipseIDE中运行应用程序时,下面的代码可以工作,但在服务器上编译和运行时,它会生成异常? 我就是不明白 public class Database { Connection conn = null; Statement stmt = null; ResultSet rs = null; public Database() throws SQLException { String host = "localhost:3
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;
}
}
}
这是我得到的stacktrace:
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)
java.sql.SQLException:找不到适合jdbc的驱动程序:mysql://localhost:3306/stickmanDatabase?user=richard&password=xxxxxxxx
位于java.sql.DriverManager.getConnection(未知源)
位于java.sql.DriverManager.getConnection(未知源)
在stickmanPyramidScheme.server.Database.(Database.java:23)
在stickmanPyramidScheme.server.LoginVerification.verifyLogin(LoginVerification.java:10)
在stickmanPyramidScheme.server.StickmanServer.parseAndExecute(StickmanServer.java:55)上
位于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目录。仍然会出现相同的错误。您不仅需要IDE中的驱动程序jar文件,而且还需要将其安装在服务器上。您没有说这是哪种服务器,但jar必须位于服务器进程的类路径上;即,在WEB应用程序的
WEB-INF/lib
目录中,或者简单地说在服务器JVM的-classpath
参数中指出。您不仅需要IDE中的驱动程序jar文件,还需要将其安装在服务器上。您没有说这是哪种服务器,但jar需要位于服务器进程的类路径上;即,在WEB进程的WEB-INF/lib
目录中pp,或仅在服务器JVM的-classpath
参数中指示。在eclipse中运行文件时,jdbc驱动程序位于项目类路径中。将其部署到服务器时,必须将其也包含在其中。可以在war/jar/ear库中,也可以在某些服务器库中。在eclipse中运行文件时,jdbc驱动程序位于在您的项目类路径中。当您将其部署到服务器时,您必须将其也包含在其中。可以在war/jar/ear库中,也可以在某些服务器库中。调用Class.forName(“com.mysql.jdbc.Driver”);在DriverManager.getConnection(url);
之前
因为DriverManager不知道MySql驱动程序。Class.forName(“com.MySql.jdbc.Driver”)
将MySql驱动程序实现本身注册到DriverManager
顺便说一句:在你的问题标题中是“运行时”,而不是“编译时”。调用Class.forName(“com.mysql.jdbc.Driver”);在DriverManager.getConnection(url)之前;
因为DriverManager不知道MySql驱动程序。Class.forName(“com.MySql.jdbc.Driver”)
将MySql驱动程序实现本身注册到DriverManager
顺便说一句:在你的问题标题中是“运行时”而不是“编译时”。伙计,很简单,只需将“mysql-connector-java-x.x.xx-bin.jar”添加到“WEB-INF/lib”文件夹中即可。伙计,很简单,只需将“mysql-connector-java-x.x.xx-bin.jar”添加到“WEB-INF/lib”文件夹中即可“您需要在应用程序的WEB-INF/lib文件夹中添加ojdbc14.jar和mysql连接器jar
如果您还有任何问题,请告诉我。您需要在应用程序的WEB-INF/lib文件夹中添加ojdbc14.jar和mysql连接器jar
如果您还有任何问题,请告诉我。我解决了这个问题。。。 我的印象是Eclipse负责将所有文件放在一起,但我需要在清单中添加类路径。将它放在清单中是有效的,但是添加一个-classpath选项或将它添加到我的路径中都没有 任何有类似问题的人都应该注意,您需要将其添加到Eclipse创建的jar中的MANIFEST.MF中:
Class-Path: /path/file.jar
文件末尾有一个空行我解决了这个问题。。。 我的印象是Eclipse负责将所有文件放在一起,但我需要在清单中添加类路径。将它放在清单中是有效的,但是添加一个-classpath选项或将它添加到我的路径中都没有 任何有类似问题的人都应该注意,您需要将其添加到Eclipse创建的jar中的MANIFEST.MF中:
Class-Path: /path/file.jar
文件末尾有空行请在错误输出上使用代码格式。请注意,使用格式更清晰(我编辑了您的问题)。根据下面的建议,我。。。。添加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中。这些都不起作用,我也没有想到它们的任何组合。我很不明白为什么这不起作用。一个
-bin.jar
通常包含本地人(例如.dll
或.so
文件)。AFAIU用户Jar还应该只包含类的Jar,特别是com.mysql.jdbc.Driver
。您是否有允许您检查JAR内容的IDE,或者您知道如何使用SDK工具列出内容?如果是这样,找到包含该类的JAr,并将其添加到WEB-INF/lib
。还要注意a)最好编辑此类信息。作为更新b)只有我会收到你开始评论的通知。。“根据下面的建议,…”尝试添加我的