这个问题已经解决了。下面是我检查“连接拒绝”错误时所遵循的列表。
这个问题的答案似乎很愚蠢:我使用了一个过时的mysql驱动程序( 5.1.9,当前的最新版本是5.1.32)。
但我还是不知道为什么老版本不起作用。
我在virtualbox托管的虚拟机中安装了mysql服务器,我可以通过命令行mysql客户端或mysql工作台在主机中成功地连接到它。
但是,我无法使用具有相同ip和端口的mysql连接器连接到它。
我用nat连接主机和vm,并将mysql服务器的3306转发到主机的9936端口。
用于测试连接的java代码:
String url = "jdbc:mysql://127.0.0.1:9936/test";
Class.forName ("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection(url, "usr", "pwd");这是一个错误:
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:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)这是非常有用的,因为我可以成功地告诉它,并连接到它与任何mysql客户端,我可以找到,但java代码只是不工作!
2014年更新09 30
我尝试了以下步骤,但不起作用:
以下是当前的状态:
virtualbox设置:

我可以使用mysql客户端成功地连接到它:

但是简单的jdbc代码会引发错误:

添加证据:
mysql连接器-java 5.1.9:

mysql-连接器-java 5.1.32:

发布于 2014-09-03 09:16:14
我在MariaDB VM中有ArchLinux (主机是Windows8.1),用于网络的配置节选/etc/mysql/my.cnf如下所示:
#skip-networking
bind-address = 0.0.0.0这是我的VirtualBox NAT配置:

我还授予远程连接特权:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION通过这个设置,我可以使用MySQL客户机从端口9936上的主机进行连接。
这是我的等级建筑:
apply plugin: 'java'
apply plugin: 'application'
mainClassName = "Main"
repositories {
mavenCentral()
}
dependencies {
runtime 'mysql:mysql-connector-java:5.1.32'
}这是根包中的Main.java:
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
public class Main {
public static void main(String[] args) {
try {
String url = "jdbc:mysql://127.0.0.1:9936/test";
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection(url, "root", null);
System.out.println("Connection successful!");
} catch(Throwable t) {
t.printStackTrace();
}
}
}使用gradle run从主机上运行它会产生:
Connection successful!你能用这个完全相同的设置来再现这样一个成功的场景吗?Java是否允许使用网络连接(例如防火墙应用程序)?
https://stackoverflow.com/questions/25580210
复制相似问题