java - 无法使用java从VM连接到mysql数据库

标签 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: 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:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at com.mysql.jdbc.Util.handleNewInstance(Util.java:400) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1038) at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:628) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1014) at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2249) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2280) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2079) at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:794) at 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) at com.mysql.jdbc.Util.handleNewInstance(Util.java:400) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:325) at java.sql.DriverManager.getConnection(DriverManager.java:571) at java.sql.DriverManager.getConnection(DriverManager.java:215) at DatabaseConnection.main(DatabaseConnection.java:12) Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2926) at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:560) ... 16 more

我相信问题可能出在客户端的 mysql 设置上,在文件/etc/mysql/my.cnf 中,但我真的不知道如何更改它们,因为我没有找到这方面的示例特定情况。我还认为,当 mysql 通常使用 3306 时,我将端口更改为 8080,这可能会导致问题。

那么,问题是,我怎样才能使它发挥作用?谢谢。

编辑:我还想补充一点,端口更改(更改为 8080)是在服务器上的 apache 的 conf 文件中进行的。这默认是 80。所以也许它不应该影响 mysql 的 3306。

最佳答案

Another thing is that, on the virtual machine, I can access the database using a browser.

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

默认情况下,root 帐户(如果您使用的是该帐户)仅在运行 MySQL 的同一台 PC 上运行时才允许连接。

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

例如:

CREATE USER 'Florina'@'192.168.1.%' IDENTIFIED BY 'A-Password';
GRANT ALL PRIVILEGES ON Your_Database TO 'Florina'@'192.168.1.%';

这应该允许帐户 Florina 从您子网上的任何地址连接到 MYSQL 服务器,因此即使 VM 在每次重启后获得不同的 IP 地址也没有关系。

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

事实上,你确定你改变了 MYSQL 以监听端口 8080 还是你改变了 Apache 以监听端口 8080。如果你改变了 apache 那么你将进入浏览器中带有 :8080 的 url。 这并不意味着 MySQL 正在监听端口 8080 在这种情况下,请从您的

中删除 :8080
 String url = "jdbc:mysql://192.168.1.236/fps";

关于java - 无法使用java从VM连接到mysql数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31533783/

相关文章:

java - 如何通过检查找到返回类型的参数化类型?

mysql - phpmyadmin登录突然不工作

mysql - wampp 上接受 innodb 的配置不起作用

java - 如何将数据源 url 查询参数添加为 application.properties?

java - 在没有 String 作为通用类型的 Wicket 口中使用 AutoCompleteTextField

java - OSGi和依赖注入(inject)有什么关系

mysql - in_array() 期望参数 2 为数组,给出错误为 null

php - 使用 php 创建消息

php - 在 WAMP 环境中设置 Concerto 自适应测试平台时出错

PHP 显示为 HTML