Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未找到适合jdbc的驱动程序:mysql://localhost/_Java_Mysql_Jdbc_Osx Lion - Fatal编程技术网

Java 未找到适合jdbc的驱动程序:mysql://localhost/

Java 未找到适合jdbc的驱动程序:mysql://localhost/,java,mysql,jdbc,osx-lion,Java,Mysql,Jdbc,Osx Lion,我正在尝试将我的代码从linux移植到MacOSX LION。以下方法在linux上运行良好 Connection getConnection() throws SQLException{ String url = "jdbc:mysql://localhost/"; return DriverManager.getConnection(url, "root", "mypassword"); } 但它在我的mac电脑上不起作用。我使用的是XAMMP,所以数据库的路径是/Appl

我正在尝试将我的代码从linux移植到MacOSX LION。以下方法在linux上运行良好

Connection getConnection() throws SQLException{
    String url = "jdbc:mysql://localhost/";
    return DriverManager.getConnection(url, "root", "mypassword");
}
但它在我的mac电脑上不起作用。我使用的是XAMMP,所以数据库的路径是
/Applications/XAMPP/xamppfiles/bin/mysql
。我得到的错误读取

Exception in thread "main" java.sql.SQLException: 
    No suitable driver found for jdbc:mysql://localhost/
at java.sql.DriverManager.getConnection(DriverManager.java:602)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
根据以下帖子的反馈更新:

我下载了jar并将其添加到项目的构建路径中。当我尝试添加
Class.forName(“com.mysql.jdbc.Driver”)
时,我得到了编译错误,所以我将其注释掉。然后,我运行程序以获得以下错误:

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:350)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2408)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2445)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2230)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at learning.database.Classroom.getConnection(Classroom.java:42)
at learning.database.Classroom.main(Classroom.java:239)

Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:218)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:259)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300)
... 16 more

Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)
线程“main”com.mysql.jdbc.exceptions.jdbc4.CommunicationsException中的异常:通信链路故障 成功发送到服务器的最后一个数据包是0毫秒前的。驱动程序尚未从服务器收到任何数据包。 位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 位于java.lang.reflect.Constructor.newInstance(Constructor.java:513) 位于com.mysql.jdbc.Util.HandleneInstance(Util.java:411) 位于com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117) 在com.mysql.jdbc.MysqlIO上(MysqlIO.java:350) 位于com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2408) 位于com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2445) 位于com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2230) 位于com.mysql.jdbc.ConnectionImpl(ConnectionImpl.java:813) 位于com.mysql.jdbc.JDBC4Connection(JDBC4Connection.java:47) 位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 位于java.lang.reflect.Constructor.newInstance(Constructor.java:513) 位于com.mysql.jdbc.Util.HandleneInstance(Util.java:411) 位于com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399) 位于com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334) 位于java.sql.DriverManager.getConnection(DriverManager.java:582) 位于java.sql.DriverManager.getConnection(DriverManager.java:185) 在learning.database.教室.getConnection(教室java:42) at learning.database.教室.main(教室.java:239) 原因:java.net.ConnectException:连接被拒绝 位于java.net.PlainSocketImpl.socketConnect(本机方法) 位于java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) 位于java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) 在java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) 位于java.net.socksocketimpl.connect(socksocketimpl.java:432) 位于java.net.Socket.connect(Socket.java:529) 位于java.net.Socket.connect(Socket.java:478) 位于java.net.Socket(Socket.java:375) 位于java.net.Socket(Socket.java:218) 位于com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:259) 在com.mysql.jdbc.MysqlIO上(MysqlIO.java:300) ... 还有16个 Java结果:1 生成成功(总时间:0秒)
您需要在mac的类路径上安装mysql jdbc连接器jar。

JAVA JDK没有特定的SQL驱动程序(即mysql、postgre、MS SQL等)。您需要分别下载和安装它们。以下是java mysql连接器的下载链接:


它说将驱动程序放在类路径中,但也可以将其放在IDE的构建路径中,这可能会更容易,具体取决于您所做的操作。

确保mysql jdbc连接器位于类路径中。您可能还需要加载驱动程序,在尝试获取连接之前添加以下行:

Class.forName("com.mysql.jdbc.Driver");

您需要告诉JVM加载驱动程序。它是这样的:Class.forName(“com.mysql.jdbc.Driver”);另一个问题可能是其中的一部分,我不知道。在linux上,转到localhost/phpmyadmin不需要密码(有一个密码可以进入mysql视图)。但是,在mac上,我必须输入xampp的密码,然后输入一个密码才能登录。我已经更新了帖子,在添加驱动程序后显示了新错误。好吧,新错误并不完全是坏消息。这确实意味着驱动程序加载正确,您的项目可以看到数据库。您现在遇到的错误(java.net.ConnectException:连接被拒绝)是由SQL server拒绝您的凭据引起的。假设此代码在linux机器上正常工作,则错误存在于代码之外。检查用户表并确保您的凭据正确。您可以做一件事(尽管从长远来看这会造成一个安全漏洞,但就是给您的用户以“%”的完全权限(“root”@“%”允许root用户从任何地方登录)我的知识并不是那么先进。我如何实现
'root'@'%
?我只是在终端中键入它吗?登录mySQL创建由“somepass”标识的用户“root'@'”;使用GRANT选项将**上的所有特权授予“root'@'”;我只想重复一下,这会打开一个安全漏洞,因为它允许任何人尝试和猜测您的权限ot密码。这就是“%”符号的作用,但它可能会帮助您调试此问题。我解决了此问题。我接受此答案,因为它解决了问题的第一部分。指向第二部分解决方案的链接如下: