Java - 使用 JDBC 连接到在线 MySQL 数据库时出现问题

Posted

技术标签:

【中文标题】Java - 使用 JDBC 连接到在线 MySQL 数据库时出现问题【英文标题】:Java - trouble connecting to online MySQL database using JDBC 【发布时间】:2011-11-04 21:16:20 【问题描述】:

我正在尝试使用 JDBC 在我的 Java 应用程序中建立连接以访问我的在线数据库,以便插入和查询表。这是我目前正在尝试的:(实际 IP/用户/密码已编辑,但它们是正确的,因为我已经从 php 脚本中完成了类似操作)

String url = "jdbc:mysql://984.168.199.70/my_db_name"; 
    String user = "my_username"; 
    String pass = "my_password";

Class.forName ("com.mysql.jdbc.Driver").newInstance ();
    Connection conn = (Connection) DriverManager.getConnection(url, user, pass);
    stmt = (Statement) conn.createStatement();

但这不起作用,我收到错误:

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 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.

在那之后的错误日志很长。

所以要指出:我在使用 PHP 脚本之前已经连接到这个服务器,并且我已经使用 JDBC 连接到我的本地 MySQL 数据库并与之交互。

感谢您的帮助。

【问题讨论】:

有没有为 MySQL 开放的特殊端口,或者是默认端口? 另外,看看***.com/questions/2102912/… 至于具体问题,请查看***.com/questions/2983248/jdbc-with-mysql/…至于您发布的代码,那些不必要的转换让我认为您实际上为ConnectionStatement导入了MySQL的具体实现类.虽然不一定是您的问题的原因,但这是一种不好的做法。始终声明反对java.sql.* 接口!如果您升级驱动程序或切换数据库,否则您的 JDBC 代码会中断并需要完全重写/重建。 哦,我的类中有 private Statement stmt 之类的变量,以及 java.sql.* 导入。我错过了什么吗? 没关系。然后删除那些误导性的不必要的演员表。同样,它与您的具体问题无关。请参阅重复链接。 【参考方案1】:

我也遇到过这个问题,而且总是(在我的情况下)归结为不正确的 jdbc url,例如缺少/错误的端口号(我知道您的示例代码已被编辑,但它没有指定任何端口)或不正确的 ip 地址,未能检查 mysql 是否正在运行并接受您期望的端口和 ip 上的连接。检查 my.cnf 中的绑定地址与 jdbc url 中的 ip 地址

【讨论】:

我不确定我应该指定什么(如果有的话)端口...我拥有的服务器托管在 Godaddy.com 上,这很难处理 默认端口是 3306,所以你的 jdbc url 应该像 jdbc:mysql://84.168.199.70:3306/my_db_name 然后正如 BalusC 所说,删除 (Connection) casts。快速谷歌显示了这一点,可能有助于help.godaddy.com/article/262 谢谢,但还是没有运气。令人讨厌的是,具有相同 IP/用户名/密码的基本 PHP 脚本可以完美运行。 Godaddy 是不允许 Java 访问还是什么? 如果您尝试从您的家用电脑连接到 godaddy 的 mysql 服务器,它很可能由于防火墙而无法工作,例如,我无法想象可以从外部访问端口 3306,所以问题是godaddy网络内的客户端在哪里?您还提到了一个有效的 PHP 脚本,PHP 脚本在哪里运行? 我想我解决了这个问题 - 请参阅下面的答案。我不确定这是否是正确的答案,或者我只是运气好,但它似乎奏效了。【参考方案2】:

在这里回答我自己的问题,因为我的代码很好。问题出在我的 Godaddy 设置上。

基本上,当您与这些人一起创建 MySQL 数据库时,请确保您将“允许直接数据库访问”设置为“是”。显然我的其他数据库不是。

如果其他人有任何意见,我仍然会暂时不回答这个问题。这些配置的东西总是让我...

【讨论】:

我面临着完全相同的情况。为此,我正在使用 000webhost.com 的免费服务。同样的错误?任何想法如何解决问题或找到对数据库的“允许直接访问”?

以上是关于Java - 使用 JDBC 连接到在线 MySQL 数据库时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

无法将 Java ap 连接到在线 MySQL 数据库 - 错误的 URL

连接到在线 SQL 数据库

如何使用 jdbc 连接到 oracle

尝试使用JDBC连接到Java Derby数据库

使用 jdbc Java、Android 应用程序连接到 SQL Server 数据库

无法使用 Impala JDBC 驱动程序通过 Java 应用程序连接到 Impala