DatabaseException CommunicationsException:通信链路故障

Posted

技术标签:

【中文标题】DatabaseException CommunicationsException:通信链路故障【英文标题】:DatabaseException CommunicationsException: Communications link failure 【发布时间】:2012-02-21 12:25:45 【问题描述】:

我使用 Ubuntu 和 Net-beans。我从 Netbeans 向导制作了一个 java 桌面数据库应用程序。我使用 mysql 数据库,我可以从它的 Services → Databases 打开并运行查询。当我运行它时,我得到了下面的异常。当我清理和构建项目运行 jar 文件时,同样的异常。我已经以同一台机器的双启动方式安装了 Windows,并且也有相同的 MySQL 数据库和 Java。当我运行使用 Ubuntu Netbeans 制作的 jar 文件时,它可以完美地在 Windows 中运行并显示数据库数据。我也采用了另一种方法,我在 Windows Netbeans 中使用相同的数据库制作了相同的 Java 应用程序,并且它与 Netbeans 和 jar 文件一起完美运行。但是当我尝试在 Ubuntu 中运行它时,Netbeans 和 jar 文件都显示以下异常。

[TopLink Info]:2012.01.29 11:16:58.898--ServerSession(285416048)--TopLink,版本:Oracle TopLink Essentials - 2.0.1(Build b09d-fcs (12/06/2007)) 2012 年 1 月 29 日上午 11:16:59 org.jdesktop.application.Application$1 运行 严重:应用程序类 customerrecordsu.CustomerRecordsUApp 无法启动 本地异常堆栈: 异常 [TOPLINK-4002](Oracle TopLink Essentials - 2.0.1(Build b09d-fcs (12/06/2007))):oracle.toplink.essentials.exceptions。

最后一个成功发送到服务器的数据包是 0 毫秒前。驱动程序没有收到来自服务器的任何数据包。 错误代码:0 在 oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:305)

... lot of more

原因:java.net.SocketException:无法连接到 SOCKS 代理:连接被拒绝 在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:427)

... lot of more

以下是删除 cmets 的“my.cnf”文件的一部分。

[client]
port        = 3306
socket      = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket      = /var/run/mysqld/mysqld.sock
nice        = 0
[mysqld]
user        = mysql
socket      = /var/run/mysqld/mysqld.sock
port        = 3306

skip-external-locking
bind-address        = 127.0.0.1

下面是persistance.xml文件的一部分

  <property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
  <property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/MyBusinessRecords"/>
  <property name="toplink.jdbc.user" value="root"/>
  <property name="toplink.jdbc.password" value="password"/>

Netbeans 向导使用 JPA 和 Top Link。我用纯 Java 制作了一个没有向导的程序,它在 Ubuntu 中按预期完美运行并显示数据库数据。该程序如下。上面和下面都使用相同的 Java MySQL connector.jar。

public static void main(String[] args) 
    Connection con = null;
    Statement st = null;
    ResultSet rs = null;
    int id = 0;
    String name = null;
    try 
        String url = "jdbc:mysql://localhost:3306/MyBusinessRecords";
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        con = DriverManager.getConnection(url, "root", "5843");
        if (con != null) 
            System.out.println("A database connection has been establised!");
            st = con.createStatement();
            rs = st.executeQuery("select * from COUNTRIES");
            while(rs.next())
            id = rs.getInt(1);
            name = rs.getString(2);
                System.out.println("id = " + id + " Name = " + name);
            
        
     catch (Exception e) 
        System.out.println("Problem" + e.toString());
     finally 
        if (con != null) 
            try 
                rs.close();
                st.close();
                con.close();
             catch (Exception e) 
                System.out.println(e.toString());
            
            con = null;
        
    

这是我的系统

java版本“1.7.0_01” Java HotSpot(TM) 64 位服务器 VM(内部版本 21.1-b02,混合模式) Ubuntu 11.10。操作系统类型 64 位 MySQL 版本- MySQL 5.1.58-1ubuntu1 MySQL 客户端版本 5.1.58 套接字:/var/run/mysqld/mysqld.sock

我在这个网站上阅读了超过 15 篇关于相同问题的问答,但现在有一个帮助了我。请帮帮我。

【问题讨论】:

IP/端口似乎有些问题。你 ping 并检查了吗? 当我 ping 127.0.0.1 (127.0.0.1) 56(84) 字节的数据时。来自 127.0.0.1 的 64 个字节:icmp_req=1 ttl=64 时间=0.031 毫秒 来自 127.0.0.1 的 64 个字节:icmp_req=2 ttl=64 时间=0.037 毫秒 来自 127.0.0.1 的 64 个字节:icmp_req=3 ttl=64 时间=0.036毫秒 如何查看?telnet localhost 3306 Trying 127.0.0.1... 已连接到 localhost。转义字符是 '^]'。 = 5.1.58-1ubuntu1.a.atKZeP@1rlG_&?I3Connection 被外部主机关闭。 您的 MySQL 服务是否在后台运行?您的服务似乎没有运行。M 不确定 Ubuntu,但在 Windows 中,您可以从 services.msc 启动服务。 在浏览器上写 http://localhost:3306 告诉我你得到了什么... 【参考方案1】:
   String url = "jdbc:mysql://localhost:3306/MyBusinessRecords";

原因:java.net.SocketException:无法连接到 SOCKS 代理: 一个不存在的 SOCKS 代理 绑定地址 = 127.0.0.1 您可以尝试 bind-address = 0.0.0.0 或 jdbc:mysql://127.0.0.1:3306/MyBusinessRecords"

【讨论】:

Tanaks Yongxin,这两个选项都不起作用。当我通过 sudo 在 Ubuntu 中以超级用户身份登录并运行构建 jar 文件时,它可以工作。此外,当我以 root 身份打开 Netbeans 时,它也可以正常工作。一定是 JPA 或 Top-Link 的问题。【参考方案2】:

试试 Java 1.6。我遇到了类似的问题并改回 Java 1.6(我已升级到 1_7),问题就消失了。 1_7 可能需要不同的 toplink 或 OracleDriver 版本。

【讨论】:

以上是关于DatabaseException CommunicationsException:通信链路故障的主要内容,如果未能解决你的问题,请参考以下文章

DatabaseException CommunicationsException:通信链路故障

Android Kotlin firebase.database.DatabaseException:在类上找不到要序列化的属性

com.google.firebase.database.DatabaseException 播放控制台错误

DatabaseException:找到两个具有冲突区分大小写的getter或字段

com.google.firebase.database.DatabaseException:无法将 java.lang.String 类型的值转换为 long

com.google.firebase.database.DatabaseException:无法将 java.lang.String 类型的对象转换为数据类对象 KOTLIN