所以我将MySQL Connector / J 5.1.16添加到我的项目的Build Path中。我正在使用默认的OSX Java包和MAMP Pro 1.9.4与MySQL 5.1.44和Eclipse。
我已经使用以下功能设置了一个简单的Java应用程序:
private static String dbUrl = "jdbc:mysql://127.0.0.1:3306/mpp";
private static String dbUsername = "root";
private static String dbPassword = "root";
private Statement statement = null;
private void dbConnect() {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(dbUrl, dbUsername, dbPassword);
statement = connection.createStatement();
} catch(SQLException e) {
System.err.print(e.getMessage() + " ARGH!");
} catch(Exception e) {
System.err.print(e.getMessage() + " FUUUUUUUUUU!");
}
}
当我运行它时,我收到以下错误:
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. ARGH!
我用Google搜索了大约一个小时但没有成功。有想法该怎么解决这个吗? JDBC驱动程序应该没问题,我对它进行了测试。
修改
我尝试通过控制台运行
SnowCave:src stefanschipor$ java -cp $CLASSPATH test
我得到与上面相同的输出
答案 0 :(得分:15)
您已打开MAMP,请转到服务器> MySQL并取消选中“仅允许本地访问”,默认情况下已选中。这很奇怪,因为我正在做的是本地的,但无论如何......
我的程序似乎有效,@JamesA建议的命令也会产生预期的输出!
好哇!
答案 1 :(得分:3)
您确定MySQL在端口3306上运行吗?
如果mysql守护程序正在侦听端口3306 lsof -i :3306
应返回:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 7616 username 10u IPv6 0x1fbf6940 0t0 TCP *:mysql (LISTEN)
使用nc localhost 3306
直接连接到端口应返回:
H
5.5.969]G.Mw4??9cfUY?k!^:D&mysql_native_password
其中5.5.969
是mysql版本号。
您还可以尝试使用DbVisualizer之类的工具来测试您的连接网址。
答案 2 :(得分:1)
您需要使用Port localhost:8889或您在MAMP中找到的任何端口>设置>端口> MySQL的端口。 那么你的Connection就会成功!
答案 3 :(得分:0)
我在OSX上也有这个神秘的错误,并且在第一次发生错误时没有找到任何解决方案。在我的情况下,如果在开发期间修改了数据库结构或删除了表(MySQL作为JBoss的数据源),则会发生这种情况。在所有情况下,如果我在修改后关闭MySQL并在JBoss启动之前重新启动它,我可以避免错误。
答案 4 :(得分:0)
这仅仅是因为您的mysql
服务未运行...仅通过系统偏好设置运行mysql
服务,或者如果您已使用brew
安装了该服务,请运行brew services start mysql
< / p>