【问题标题】:connect java to mysql using jdbc on osx在osx上使用jdbc将java连接到mysql
【发布时间】:2011-09-08 10:24:54
【问题描述】:

所以我将 MySQL Connector/J 5.1.16 添加到我的项目的构建路径中。我正在使用默认的 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!

我用谷歌搜索了大约一个小时,但没有成功。有想法该怎么解决这个吗? JDBC驱动应该没问题,我测试了一下。

编辑

我尝试通过控制台运行它

SnowCave:src stefanschipor$ java -cp $CLASSPATH test

我得到与上面相同的输出

【问题讨论】:

  • 可能是防火墙问题。 dbUrl 是否正确?你能通过一些客户端控制台连接到 MySQL 吗?
  • 在你的情况下默认端口 localhost:3306
  • @Farshid 更新了帖子,同样的事情 :)
  • 不,我的意思是不用你的代码连接到 MySQL 实例。
  • 是的,它有效。 mysql exec 在 MAMP 文件夹中,但这应该不是问题。

标签: java mysql jdbc mamp


【解决方案1】:

好吧,这很愚蠢。 :)

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

我的程序似乎可以运行,@JamesA 建议的命令也产生了预期的输出!

嘘!

【讨论】:

  • 这对我有用。感谢您发布解决方案!
  • 可能是您在 JDBC 连接中使用了错误的端口。例如,如果您使用 MAMP,则端口可以改为 8889。这是我遇到的确切问题,希望对您有所帮助。
  • 在 MAMP PRO 3.3 上,您必须选中“允许网络访问 MySql”并选择“仅从此 Mac”。
【解决方案2】:

你确定 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。

【讨论】:

  • 我关闭了防火墙,但我启用了它并允许使用 Java。还是一样的:)
  • 我在终端中运行了命令,但没有输出。但是,端口应该没问题,这是我的 MAMP 配置截图grab.by/ahFv
  • lsof -i :3306 的输出是什么?
  • 这意味着 MySQL 没有监听 3306 端口。检查错误日志/Applications/MAMP/logs/mysql_error_log.err
  • 您的错误日志看起来正确。剩下的唯一建议是查看您的 /var/log/appfirewall.log 中是否有任何相关内容,然后尝试重新安装 MAMP。
【解决方案3】:

您需要使用端口 localhost:8889 或您在 MAMP > 设置 > 端口 > MySQL-Port 中找到的任何端口。 那么你的连接就会成功!

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 重启了 MAMP,还是不行 :)
    【解决方案5】:

    这只是因为您的mysql 服务没有运行...只需从系统偏好设置中运行mysql 服务,或者如果您使用brew 安装了它,请运行brew services start mysql

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-17
      • 2018-10-31
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 2018-11-30
      相关资源
      最近更新 更多