从Java连接到托管在虚拟机中的MYSQL数据库

从Java连接到托管在虚拟机中的MYSQL数据库,java,mysql,jdbc,Java,Mysql,Jdbc,我试图连接到托管在虚拟机中的MySQL数据库,但它不起作用 对我来说 以下是我的设置: 最新Ubuntu服务器witch Apache2 mysql已安装并正在运行 数据库“反馈”,设置“测试”表并填写测试数据 网络适配器已桥接。服务器的IP是(如果我输入ifconfig)10.0.0.1,我的电脑的IP是10.0.0.4 端口3306已手动打开。jar mysql连接器java 5.1.21-bin.jar是一个引用库 以下是Java代码: import java.sql.*; publ

我试图连接到托管在虚拟机中的MySQL数据库,但它不起作用 对我来说

以下是我的设置:

  • 最新Ubuntu服务器witch Apache2 mysql已安装并正在运行
  • 数据库“反馈”,设置“测试”表并填写测试数据
  • 网络适配器已桥接。服务器的IP是(如果我输入ifconfig)10.0.0.1,我的电脑的IP是10.0.0.4
  • 端口3306已手动打开。jar mysql连接器java 5.1.21-bin.jar是一个引用库
以下是Java代码:

import java.sql.*;

public class Main {

  public static void main(String[] args) {

    try {

        Class.forName("com.mysql.jdbc.Driver").newInstance();
        System.out.println("Sucess");
        Connection con = DriverManager.getConnection("jdbc:mysql://10.0.0.1/feedback","root","myrootpassword");

        con.setReadOnly(true);



    } catch (Exception e) {


        System.err.print("NO CONNECTION");
    }

  }
}
我希望有人能帮上忙,因为我正在研究这个问题一段时间

谢谢

只有两个想法:

  • MySQL是否配置为侦听所有地址而不仅仅是本地地址?绑定地址配置指令的值是多少?0.0.0.0表示“侦听所有接口”,而127.0.0.1表示“侦听本地主机接口,仅从该主机进行访问”
  • 也许你可以在你的捕获声明中提取一些关于这个问题的细节

希望这有帮助

如果我正确理解了一个问题,请连接VM数据库,然后检查以下步骤

1.jdbc:mysql://10.0.0.1/feedback.

2.确保没有防火墙阻止对端口3306的访问


3.确保允许您连接的用户从此特定主机名进行连接。

忽略System.out.println(“成功”);为什么你认为你没有连接?因为它在try/catch块中;如果没有它,它无论如何也不会工作,因为如果在输出中看到
NO CONNECTION
,那么方法需要一个,然后添加
e.printStackTrace()
,并将跟踪添加到问题,因为连接con=driverManger.getConnection。。。断开try块(=>出现错误)我已尝试为该表达式指定自己的try/catch块。这一行绝对是原因。请给我一个提示,如何配置mysql服务器,使其在所有接口上侦听。异常输出:成功发送到服务器的最后一个数据包是0毫秒前的。驱动程序尚未从服务器收到任何数据包。位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)位于sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)位于sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知源),java.lang.reflect.Constructor.newInstance(未知源)位于com.mysql.jdbc.Util.handleNewInstance(Util.java:411)我仍然不知道这是否是问题所在,但为了使其正确侦听,请编辑/etc/mysql/my.cnf,并确保没有行
跳过网络
(或者前面有破折号注释),并且有一行(未注释)
绑定地址=0.0.0
行。如果您进行了任何编辑,请使用
sudo/etc/init.d/mysql restart
重新启动mysql。这里有一节:“不再跳过网络,默认情况下现在只在本地主机上侦听,这是更兼容的,而且不安全的”。绑定-地址127.0.0.1。我是否应该将其更改为0.0.0.0?如果仅此更改,则无法解决问题。是的,只要您具有
bind address=127.0.0.1
,它将不接受来自外部机器的连接(此处为非虚拟化机器)。这是强制性的,但可能还不够。另外,不要忘记在任何配置更改后重新启动mysql。我以为root拥有所有权限,但我错了。谢谢guy you's great:)如果我以root身份登录,我必须授予权限吗?确保在您的MySQL架构中向该主机和用户授予适当的权限,即使您以root身份登录。我以为root拥有所有权限,但我错了。谢谢你们,你们太棒了:)