无法使用java

时间:2015-07-21 08:19:11

标签: java mysql wamp

在我的主机上,我安装了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毫秒前。驱动程序未收到来自服务器的任何数据包。       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)       at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)       at java.lang.reflect.Constructor.newInstance(Constructor.java:526)       在com.mysql.jdbc.Util.handleNewInstance(Util.java:400)       at 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)       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)       at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)       at 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但是我真的不知道如何更改它们,因为我没有找到这方面的例子特定的情况。我还认为,当mysql正常使用3306时,我将端口更改为8080的事实可能会导致问题。

所以,问题是,我怎么能做到这一点?感谢。

编辑:我还想添加端口更改(到8080)是在服务器上的apache的conf文件中进行的。默认情况下这是80.所以也许它不应该影响到mysql的3306。

3 个答案:

答案 0 :(得分:2)

  

另一件事是,在虚拟机上,我可以访问   使用浏览器的数据库。

这意味着您可以从VM上的浏览器运行位于HOST上的网站。这与从远程PC连接不太一样。在这种情况下,运行的代码,即我假设的PHP,正在HOST上运行,并从PHP连接到MYSQL,所有这些都是主机。

默认情况下,section/div/element帐户,如果您使用的是只允许连接,如果它是在运行MySQL的同一台PC上运行的话。

尝试创建一个新的MySQL用户帐户,确保允许这个新帐户从虚拟机的ip登录MySQL。

例如:

root

这应该允许帐户CREATE USER 'Florina'@'192.168.1.%' IDENTIFIED BY 'A-Password'; GRANT ALL PRIVILEGES ON Your_Database TO 'Florina'@'192.168.1.%'; 从您子网上的任何地址连接到MYSQL服务器,因此如果VM在每次重新启动后获得不同的IP地址都无关紧要。

检查防火墙是否允许远程连接到端口8080也是一个好主意!如果你只是对端口的改变感到困惑,请使用3306。

实际上你确定你改变MYSQL来监听端口8080,或者你改变 Apache 来监听端口8080.如果你改变了apache然后你会进入浏览器中包含Florina的网址。 这并不意味着MySQL正在侦听端口8080 在这种情况下从您的

中删除:8080
:8080

答案 1 :(得分:0)

通常,mysql DB正在侦听3306port而不是8080端口,除非你改变它

如果8080端口号正确,请尝试从VM命令行ping IP地址,并检查你的mysql服务是否已启动。

答案 2 :(得分:-1)

尝试使用:Class.forName("com.mysql.jdbc.Driver");

代替:Class.forName("com.mysql.jdbc.Driver").newInstance();