在osx上使用jdbc将java连接到mysql

时间:2011-06-04 16:11:04

标签: java mysql jdbc mamp

所以我将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

我得到与上面相同的输出

5 个答案:

答案 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>