在osx上使用jdbc将java连接到mysql
因此,我将MySQL连接器/j5.1.16添加到项目的构建路径中。我在MySQL 5.1.44和Eclipse中使用默认的OSX Java包和MAMP Pro 1.9.4 我已经设置了一个简单的java应用程序,具有以下功能:在osx上使用jdbc将java连接到mysql,java,mysql,jdbc,mamp,Java,Mysql,Jdbc,Mamp,因此,我将MySQL连接器/j5.1.16添加到项目的构建路径中。我在MySQL 5.1.44和Eclipse中使用默认的OSX Java包和MAMP Pro 1.9.4 我已经设置了一个简单的java应用程序,具有以下功能: private static String dbUrl = "jdbc:mysql://127.0.0.1:3306/mpp"; private static String dbUsername = "root"; private static String dbPass
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!
我在谷歌上搜索了大约一个小时,但没有成功。有没有办法解决这个问题?JDBC驱动程序应该很好,我已经测试过了
编辑
我试着通过控制台运行这个
SnowCave:src stefanschipor$ java -cp $CLASSPATH test
我得到与上面相同的输出您确定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)
H
5.5.969]G.Mw4??9cfUY?k!^:D&mysql_native_password
使用
nc localhost 3306
直接连接到端口应返回:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 7616 username 10u IPv6 0x1fbf6940 0t0 TCP *:mysql (LISTEN)
H
5.5.969]G.Mw4??9cfUY?k!^:D&mysql_native_password
其中5.5.969
是mysql版本号
您也可以尝试使用类似于测试连接URL的工具。我在OSX上也有一个神秘的错误,在第一次出现错误时没有找到任何解决方案。在我的例子中,如果在开发过程中修改了数据库结构或删除/创建了表(MySQL作为JBoss的数据源),就会发生这种情况。在任何情况下,如果我在修改后关闭MySQL并在JBoss启动之前重新启动它,我都可以避免这个错误。好的,这太傻了。:) 您已经打开了MAMP,进入服务器>MySQL并取消选中默认选中的“仅允许本地访问”。这很奇怪,因为我现在做的是本地的,但无论如何 我的程序似乎运行正常,@JamesA建议的命令也会产生预期的输出
胡萨 您需要使用端口localhost:8889或在MAMP>设置>端口>MySQL端口中找到的任何端口。
那么你的连接就会成功 这只是因为您的
mysql
服务没有运行。。。只需从系统首选项运行mysql
服务,或者如果您使用brew
runbrew services启动mysql
安装该服务,则可能是防火墙问题。dbUrl正确吗?您可以通过某个客户端控制台连接到MySQL吗?在您的情况下,defaut port localhost:3306@Farshid更新了帖子,同样的内容:)不,我的意思是连接到MySQL实例而不使用代码。是的,它可以工作。mysql exec在MAMP文件夹中,但这应该不是问题。重新启动MAMP,仍然没有运气:)我关闭了防火墙,但我启用了它,并允许使用Java。还是一样:)我在终端中运行了命令,但没有得到任何输出。但是,端口应该是好的,这里是我的MAMP配置的屏幕截图,您从lsof-i:3306的输出是什么?这意味着MySQL没有监听端口3306。检查/Applications/MAMP/logs/mysql\u error\u log上的错误日志。err
您的错误日志看起来是正确的。剩下的唯一建议是查看您的/var/log/appfirewall.log
中是否有任何相关内容,并尝试重新安装MAMP。这对我很有效。感谢您发布解决方案!可能是您在JDBC连接中使用了错误的端口。例如,如果您使用的是MAMP,则端口可以是8889。这正是我遇到的问题,希望能有所帮助。在MAMP PRO 3.3上,您必须选中“允许网络访问MySql”,然后选择“仅从这个Mac”。