Java com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障

Java com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障,java,mysql,jdbc,Java,Mysql,Jdbc,我正在努力让我的数据库与我的Java程序对话 有人能给我一个使用JDBC的快速而肮脏的示例程序吗 我犯了一个相当严重的错误: 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

我正在努力让我的数据库与我的Java程序对话

有人能给我一个使用JDBC的快速而肮脏的示例程序吗

我犯了一个相当严重的错误:

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.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2260)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:357)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:207)
    at SqlTest.main(SqlTest.java:22)
Caused by: 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.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2181)
    ... 12 more
Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at java.net.Socket.<init>(Socket.java:375)
    at java.net.Socket.<init>(Socket.java:218)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:293)
    ... 13 more

下载MySQL-JDBC-Type-4-Treiber(例如从“MySQL-connector-java-5.1.11.zip”下载“MySQL-connector-java-5.1.11-bin.jar”)

您需要在编译和运行时在类路径中嵌入驱动程序jar

Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
// edit the jdbc url 
Connection conn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", username, password );
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery( "select * from table" );

我可能在这里找错了方向,但您的异常似乎表明您的MySQL服务器不可用

线程“main”com.mysql.jdbc.exceptions.jdbc4.CommunicationsException中的异常: 通信链路故障成功发送到服务器的最后一个数据包为0 几毫秒前。驱动程序尚未从服务器收到任何数据包。在

如果您尝试(从终端)会发生什么

系统将提示您输入与用户名关联的密码。在您输入正确的密码后,mysql客户端是否连接

如果没有,您可能必须从首选项启动MySQL。您还可以将其设置为在启动时运行。

因此,您有一个

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障
java.net.ConnectException:连接被拒绝

我引用其中的内容,其中还包含一个循序渐进的MySQL+JDBC教程:

如果您得到一个
SQLException:Connection-densed
连接超时
或一个特定于MySQL的
通信异常:
通信链路故障
,则表示数据库根本无法访问。这可能有以下一个或多个原因:

  • JDBC URL中的IP地址或主机名错误
  • 本地DNS服务器无法识别JDBC URL中的主机名
  • JDBC URL中缺少端口号或端口号错误
  • 数据库服务器已关闭
  • DB服务器不接受TCP/IP连接
  • 数据库服务器的连接已用完
  • Java和DB之间的某些东西正在阻止连接,例如防火墙或代理。

  • 要解决其中一个问题,请遵循以下建议:

  • ping
    验证并测试它们
  • 刷新DNS或改用JDBC URL中的IP地址
  • 根据MySQL数据库的
    my.cnf
    进行验证
  • 启动数据库
  • 验证mysqld是否在没有
    --跳过网络选项的情况下启动
  • 重新启动数据库并相应地修复代码,使其在
    中最终关闭连接
  • 禁用防火墙和/或配置防火墙/代理以允许/转发端口。

  • 另见:

      • 我遇到了相同的错误,因为我试图在不启动mysql服务器的情况下运行我的程序

        启动mysql服务器后,一切正常。

        刚刚经历了这一点

        必须通过以下方式使其发挥作用: (可将其放置在静态块初始化器中)

        通过以下方式获得连接:

        conn = DriverManager.getConnection(DBURL,<username>,<password>);
        

        注意。

        当Java出堆时,我发现了这个异常。如果我尝试在RAM中放入许多数据项,首先我捕获“通信链路故障”,然后捕获“OutOfMemoryError


        我记录了它,减少了内存消耗(删除1/2数据),一切正常。

        在我的情况下,我需要将Localhost替换为实际的数据库服务器IP地址

        而不是

         Connection con = DriverManager.getConnection(
         "jdbc:mysql://localhost:3306/DBname", "root", "root");
        
        我需要

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

        我也有同样的问题,下面是如何解决的:

      • jsp正在调用我在 servlet
      • 我通过
        ResultSet(getString(“columnName”)
        将两个列名传递给一个对象,但它们与数据库中的列名不匹配

      • 我不确定是哪一个解决了这个问题,但它起了作用。另外,请确保为每个表查询创建一个新的
        语句
        结果集

        请在/etc/mysql/my.cnf文件中更新您的IP地址

        bind-address  = 0.0.0.0
        

        重新启动mysql deamon和mysql服务。

        我的问题通过以下步骤得到解决:

      • 转到
        my.cnf

        vi /etc/mysql/my.cnf
        
      • 修改其绑定地址

        "bind-address = 0.0.0.0"
        
      • 重新启动MySQL

        sudo /etc/init.d/mysql restart
        

      • 这可能是一个简单的jar问题。可能您使用的是旧的
        mysql连接器java XXX bin.jar
        ,当前mysql版本不支持该连接器。我在使用mysql 5.5时使用了
        mysql-connector-java-5.1.18-bin.jar
        ,这个问题为我解决了。

        如果您使用
        WAMP
        XAMP
        服务器安装mysql数据库。 然后,您必须显式地启动mysql服务器,否则它会显示
        com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:连接数据库时通信链路故障
        如果更改端口,则会出现此类错误“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障”
        请检查您的端口号

        com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
        如果您的数据库连接长时间处于空闲状态,则会发生异常


        此空闲连接在
        connection.isClosed()上返回true 我用一种简单的方法解决了这个问题,这对我来说很有效。我遇到了seme问题“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障”。在我的db.properties文件中,我有以下内容:url:jdbc:mysql://localhost:90/myDB,
        
        仅删除了端口url,结果是url:jdbc:mysql://localhost/myDB 这对我很有效。

        我几个小时来一直有同样的问题。我正在使用MAMP服务器

        不要使用localhost:[Apache端口],而是使用MySQL端口

        下面是MAMP服务器的默认MySQL端口

        String url = "jdbc:mysql://localhost:8889/db_name";
        
        Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);
        

        vi /etc/mysql/my.cnf

        "bind-address = 0.0.0.0"
        
        sudo /etc/init.d/mysql restart
        
        String url = "jdbc:mysql://localhost:8889/db_name";
        
        Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);
        
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.9</version>
        </dependency>
        
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.31</version>
        </dependency>
        
        $ telnet localhost 3306
        Trying ::1...
        
        CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
        GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
        FLUSH PRIVILEGES;
        
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        
        mysql -u xxxx -p //local coonection to mysql
        mysql> GRANT ALL PRIVILEGES ON *.* TO 'theNewUser'@'remoteIP' IDENTIFIED BY 'passWord';
        //Query OK, 0 rows affected (xx sec)
        mysql> FLUSH PRIVILEGES;
        //Query OK, 0 rows affected
        
        Edit 
        /etc/mysql/mysql.conf.d/mysqld.cnf    or    /etc/mysql/my.cnf
        Change line:  bind-address = 127.0.0.1   to
                      bind-address = 0.0.0.0
        Restart Mysql: /etc/init.d/mysql restart
        
        jdbc.url='jdbc:mysql://remoteIP:3306/yourDbInstance?autoReconnect=true&amp;useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC'
        jdbc.user='theNewUser'
        
        [08S01] 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.
        
        dbhost=jdbc:mysql://172.18.23.100:3306/yourdatabase?useUnicode=yes&characterEncoding=UTF-8&useSSL=false
        user=root
        password=Password#321
        
        con = DriverManager.getConnection(dbhost, user, password);
        
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.21</version>
        </dependency>
        
        
        
        <!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
        <dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
            <version>2.6.2</version>
        </dependency>