在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启动之前重新启动它,我可以避免错误。