【问题标题】:threw exception [com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:抛出异常 [com.mysql.jdbc.CommunicationsException:由于底层异常导致通信链接失败:
【发布时间】:2015-06-20 21:58:26
【问题描述】:

在我的 java web 应用程序中,我连接到本地 MySQL 数据库。使用 servlet 我正在获取一个 csv 文件并将数据插入到数据库中。它连接良好并且正在插入数据,但是在每次从 csv 文件中插入后它开始逐渐减慢。当它到达 csv 文件中的第 159 行时,它会抛出此异常:

抛出异常

[com.mysql.jdbc.CommunicationsException:通信链路故障 由于潜在的异常:

java.net.SocketException 消息:权限被拒绝:连接

堆栈跟踪:

java.net.SocketException:权限被拒绝:连接

有谁知道为什么它会正常工作然后放慢速度直到它抛出这个异常?我真的对此一头雾水,网上似乎没有任何帮助。顺便说一句,我用的是tomcat8。

【问题讨论】:

  • 你是在重复使用你的连接,关闭它们还是让它们留在内存中
  • 我认为@ScaryWombat 是正确的,q.v。 this post。请尝试重新启动您的 MySQL。如果这样可以解决问题,那么您可能遇到了连接池问题。
  • 我认为你是对的,当我运行程序时连接数会增加,而且它们似乎没有关闭。我在插入后调用 connection.close() ,但这似乎并没有关闭连接。如果我调用 connection.close(),为什么它们不会关闭?

标签: java mysql csv jdbc tomcat8


【解决方案1】:

正如您已经发现,您得到的异常来自您打开太多连接以达到限制的原因。

要正确关闭与数据库的连接,基本上需要三个步骤。

  1. 关闭ResultSet(如果有的话)
  2. 关闭语句对象
  3. 关闭连接对象

典型的代码如下:

try {
    //your code that is making and using jdbc is here

    //after you finish
    rs.close(); //if a ResultSet was returned
    stmt.close(); //Close Statement
    conn.close(); //Close Connection
}catch(SQLException se){
}catch(Exception e){
}finally{
    //finally block used to close resources if Closing failed above
    try{
       if(stmt!=null)
          stmt.close();
    }catch(SQLException se2){
    }// nothing we can do
    try{
       if(conn!=null)
          conn.close();
    }catch(SQLException se){
       se.printStackTrace();
    }//end finally try
}//end try

完整示例见this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多