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

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

我得到与上面相同的输出

好的,这真是太傻了。 🙂

您已打开MAMP,转到Server> MySQL并取消选中“仅允许本地访问”,默认情况下已选中。 这很奇怪,因为我正在做的是本地的,但无论如何……

我的程序似乎工作,@JamesA建议的命令也产生预期的输出!

好哇!

你确定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之类的工具来测试您的连接URL。

你需要使用Port localhost:8889或你在MAMP>设置>端口> MySQL-Port中找到的任何端口。 然后您的Connection将成功!

我在OSX上也有这个神秘的错误,并且在第一次发生错误时没有找到任何解决方案。 在我的情况下,如果数据库结构被修改或在开发期间删除/创建表(MySQL作为JBoss的数据源),则会发生这种情况。 在所有情况下,如果我在修改后关闭MySQL并在JBoss启动之前重新启动它,我可以避免错误。