【问题标题】:Fail to connect to mysql database using Java无法使用 Java 连接到 mysql 数据库
【发布时间】:2011-07-03 13:46:25
【问题描述】:

我通过 Java 连接到 MySQL 时遇到异常。我下载了 MySQL Java 连接器并将其添加到 classpath。我正在尝试连接到 MySQL 表但没有成功。

我也尝试过telnet localhost 3306,但出现以下错误:“nodename nor servname provided, or not known”

代码如下:

//import java.sql.Connection;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class ConnectToDatabase {

    public static void main(String[] args) throws Exception{    
        //Accessing driver from the JAR file 
        Class.forName ("com.mysql.jdbc.Driver").newInstance (); 

        Connection con = DriverManager.getConnection(
            "jdbc:mysql://localhost:3306/cldatabase", "root", "root");

        //Here we create our query
        PreparedStatement statement = con.prepareStatement(
            "SELECT * FROM profiles");

        ResultSet result = statement.executeQuery();
        while(result.next()){ 
        System.out.println(result.getString("firstName") + " " +
            result.getString("lastName"));
    }
}

并且抛出了这个异常:

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. 

我的 Mac 上安装了 xampp。

这是我运行“ps -ef | grep mysql”时出现的结果

0 1694 1 0 0:00.02 ?? 0:00.03 /bin/sh /Applications/XAMPP/xamppfiles/bin/mysqld_safe --datadir=/Applications/XAMPP/xamppfiles/var/mysql --pid-file=/Applications/XAMPP/xamppfiles/var/mysql/Ts- sMacBook-Air.local.pid -2 1792 1694 0 0:00.07 ?? 0:00.28 /Applications/XAMPP/xamppfiles/sbin/mysqld --basedir=/Applications/XAMPP/xamppfiles --datadir=/Applications/XAMPP/xamppfiles/var/mysql --user=nobody --log-error=/Applications /XAMPP/xamppfiles/var/mysql/k-Air.local.err --pid-file=/Applications/XAMPP/xamppfiles/var/mysql/-MacBook-Air.local.pid --socket=/Applications/XAMPP/ xamppfiles/var/mysql/mysql.sock --port=3306 501 1814 1484 0 0:00.00 ttys000 0:00.00 grep mysql

【问题讨论】:

  • Ummm... 如果 telnet 找不到您的数据库,您还能指望什么?它显然没有运行或没有在该端口上运行。

标签: java mysql


【解决方案1】:

对此similar question on ServerFault 的任何答案有帮助吗?

1) 验证mysql绑定的地址 到,它可能是 127.0.0.1(仅) 我认为这是默认设置(在 至少在标准的 Ubuntu 服务器上)。 你必须注释掉 my.cnf 中的 bind-address 参数到 绑定到所有可用地址(您 不能选择多个,它是一个或 全部)。

2) 如果它绑定到 127.0.0.1 而你 无法使用“localhost”连接,请制作 确定它不能解析为 IPv6 本地主机地址而不是 IPv4。 (要么 只需使用 IP 地址)

3) 双重和三重检查端口 mysql 正在监听。

4) 确保您使用的是正确的 JDK 的 JDBC 连接器。

5) 确保你没有做 像开始这样愚蠢的事情 mysql 与 --skip-networking。

运行“lsof -i :3306”会得到什么?

【讨论】:

  • 如何查看mysql监听的端口?
  • 我的 Mac 上安装了 xampp
  • @Joal Halbert:my.cnf 中提到了端口,它是正确的端口 3306。我已经尝试了所有选项,除了注释绑定地址和我不明白的第 5 点
  • 奇怪我的 my.cnf 中没有绑定地址?
  • @Joel Halbert:当我现在尝试远程登录时,它只是说它拒绝了?
【解决方案2】:

如果您在 Class.forName("com.mysql.jdbc.Driver"); 上遇到问题然后在以下位置复制mysql连接器..它肯定会工作..C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\lib\WEB-INF..注意在webapps文件夹中没有名为lib的目录然后手动创建 lib 和 WEB-INF 目录并在其中粘贴 mysql 连接器。不需要任何类路径设置.....

如果您仍然遇到问题,请发送您的查询...

【讨论】:

    猜你喜欢
    • 2017-01-20
    • 1970-01-01
    • 2018-11-30
    • 2019-08-20
    • 2015-10-10
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    相关资源
    最近更新 更多