我正在开发一个 Java 程序,我需要一个数据库。现在我正在使用 MAMP,它非常简单,但我有一个虚拟机(ubuntu 服务器),我需要使用 vitualBox 将我的 Java 程序与这个虚拟机连接起来。
情況:
- 我在我的 Mac 上安装了 VirtualBox,并且安装了一个 ubuntu-server 机器
- 在VB的网络设置中设置“桥接适配器”
- 我在 ubuntu-server 上安装了 mysql,并创建了一个简单的数据库(在 ubuntu 上一切运行良好)
- 通过 ubuntu 执行 ifconfig 我得到了 ip: 192.168.1.217
因此在 java 程序中我创建了这个函数:
public static Connection connect(String host, int port, String dbName, String user, String passwd)
{
Connection dbConnection = null;
try
{
String dbString = null;
Class.forName("com.mysql.jdbc.Driver").newInstance();
dbString = "jdbc:mysql://" + host + ":" + port + "/" + dbName;
dbConnection = DriverManager.getConnection(dbString, user, passwd);
}
catch (Exception e)
{
System.err.println("Failed to connect with the DB");
e.printStackTrace();
}
return dbConnection;
}
在 main() 中我使用:
Connection con = connect(1, "192.168.1.217", 3306, "Ciao", "root", "cocacola");
3306 是默认值。我不知道它是否正确,它在 mamp 上有效,但是……我如何才能找到必须与 VB 一起使用的正确端口?
当我运行该程序时,我得到了异常...出了什么问题?
答案1
检查/etc/my.cnf/
或/etc/mysql/my.cnf
文件中的 bind_address。您的 MySQL 默认绑定到 localhost,您应该将其设置为 0.0.0.0。
寻找:
bind-address = 127.0.0.1
代替:
bind-address = 0.0.0.0
如果你没有 my.cnf 文件,你可以创建它。在这种情况下,你至少需要以下内容:
[mysqld]
bind-address = 0.0.0.0
答案2
你的方法采用了错误的参数。比较
public static Connection connect(String host, int port, String dbName, String user, String passwd)
和
Connection con = connect(1, "192.168.1.217", 3306, "Ciao", "root", "cocacola");
这意味着,当你创建字符串 dbString 时,你正在创建
jdbc:mysql://1:192.168.1.217/3306;
但是,你的重载甚至不匹配,所以我很惊讶你能走到这一步(虽然我用的是 C# 而不是 Java,所以也许这没问题)!Connection connect 需要 5 个参数,但当你调用该方法时,你传递了 6 个!
我认为改变
Connection con = connect(1, "192.168.1.217", 3306, "Ciao", "root", "cocacola");
到
Connection con = connect("192.168.1.217", 3306, "Ciao", "root", "cocacola");