【发布时间】:2015-10-10 14:18:21
【问题描述】:
在我的主机上,我安装了 Wamp,我可以使用 PHP 或浏览器进行连接。我的客户端是带有 Linux 的虚拟机,我正在尝试连接到主机上的数据库以在其中添加一些条目。
这是我的代码:
Connection conn = null;
try {
String url = "jdbc:mysql://192.168.1.236:8080/fps";
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(url, "username", "password");
System.out.println("Database connection established");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
System.out.println("Database connection terminated");
} catch (Exception e) {}
}
}
我必须提到我正在尝试通过本地网络进行连接,并且我将 Wamp 设置为在端口 8080 上工作(可以在上面看到)。另一件事是,在虚拟机上,我可以使用浏览器访问数据库。
上面的代码产生错误:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障
最后一个成功发送到服务器的数据包是在 0 毫秒前。驱动程序没有收到来自服务器的任何数据包。 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:526) 在 com.mysql.jdbc.Util.handleNewInstance(Util.java:400) 在 com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1038) 在 com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:628) 在 com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1014) 在 com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2249) 在 com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2280) 在 com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2079) 在 com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:794) 在 com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:44) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:526) 在 com.mysql.jdbc.Util.handleNewInstance(Util.java:400) 在 com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399) 在 com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:325) 在 java.sql.DriverManager.getConnection(DriverManager.java:571) 在 java.sql.DriverManager.getConnection(DriverManager.java:215) 在 DatabaseConnection.main(DatabaseConnection.java:12) 原因:java.io.EOFException:无法从服务器读取响应。预期读取 4 个字节,在连接意外丢失之前读取 0 个字节。 在 com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2926) 在 com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:560) ... 16 更多
我相信问题可能来自客户端上 mysql 的设置,在文件 /etc/mysql/my.cnf 中,但我真的不知道如何更改它们,因为我没有找到这个示例特定情况。我还认为我将端口更改为8080,而mysql通常使用3306这一事实可能会导致问题。
所以,问题是,我怎样才能做到这一点?谢谢。
编辑:我还想补充一点,端口更改(到 8080)是在服务器上 apache 的 conf 文件中进行的。这个默认是80。所以也许它不应该影响mysql的3306。
【问题讨论】:
-
问题可能出在网络通信中。确保您能够 ping 主机并确保
mysql在 8080 端口上运行。 -
mysql-connector.jar 文件怎么样?你添加了吗?
-
我认为mysql端口是从3306到3309
-
把端口改回3306还能用吗?
-
使用 ping 验证和测试数据库服务器。