无法创建PoolableConnectionFactory

时间:2011-03-05 12:04:08

标签: java mysql hibernate

有什么问题?无法连接数据库?

   org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (
            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.)

14 个答案:

答案 0 :(得分:20)

这是问题的实际原因:

  

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

您遇到数据库通信链接问题。确保您的应用程序具有对数据库的网络访问权限(并且防火墙不会阻止数据库的端口)。

答案 1 :(得分:4)

这是一个网络问题。检查数据库连接。 您的数据库连接链接,用户名和密码错误或数据库服务器已停止。

答案 2 :(得分:4)

我在源网址中遇到与localhost相同的问题。 我决定使用127.0.0.1代替localhost

答案 3 :(得分:3)

这是由avast防病毒引起的。您可以禁用avast防火墙,只允许Windows防火墙处于活动状态。

答案 4 :(得分:2)

当我使用chef在VirtualBox VM上设置tomcat和mysql服务器时遇到同样的问题。

在这种情况下,我认为真正的问题是VirtualBox似乎将非localhost地址分配给eth0,如

[vagrant@localhost webapps]$ /sbin/ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:60:FC:47
      inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0

然后使用10.0.2.15作为mysql服务器绑定地址的厨师食谱的自动检测功能。

所以在我的案例中指定了厨师食谱解决问题的节点参数的绑定地址。我希望这些信息可以帮助人们使用厨师和流浪汉。

{
  "name" : "db",
  "default_attributes" : {
   "mysql" : {
    "bind_address" : "localhost"
    ...
   }

答案 5 :(得分:1)

这是因为防火墙阻止了数据库连接。

禁用防火墙,然后再次尝试运行该程序。它对我有用......:D

答案 6 :(得分:1)

在Windows的以下路径中转到my.ini文件 C:\ProgramData\MySQL\MySQL Server 8.0\my.ini

并评论以下行

#bind-address=127.0.0.1

然后重新启动MySQL服务器并连接。

然后,您将能够从其他IP地址/机器连接到MySQL。

答案 7 :(得分:1)

此特定问题也可能在本地主机中出现。我们不能排除这是因为网络问题或Internet连接问题。即使所有数据库连接属性都正确,也会出现此问题。

使用主机名时,我遇到了同样的问题。而是使用IP地址。它将解决。

答案 8 :(得分:0)

我在pom.xml中更改了驱动程序版本并为我提供帮助

<!DOCTYPE html>
<html>

<head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>

<body>


    <div class="panel-group" id="accordion">
        <div class="panel panel-default">
            <div class="panel-heading">
                <h4 class="panel-title">
                    <a data-toggle="collapse" data-parent="#accordion" href="#S1">Season 1</a>
                </h4>
            </div>
            <div id="S1" class="panel-collapse collapse in">
                <div class="panel-body">
                    <div id="result">
                        <div class="row"></div>
                    </div>
                </div>
            </div>

        </div>
    </div>
    <div class="panel panel-default">
        <div class="panel-heading">
            <h4 class="panel-title">
                <a data-toggle="collapse" data-parent="#accordion" href="#S2">Season 2</a>
            </h4>
        </div>
        <div id="S2" class="panel-collapse collapse">
            <div class="panel-body">
            </div>
        </div>
    </div>
    <div class="panel panel-default">
        <div class="panel-heading">
            <h4 class="panel-title">
                <a data-toggle="collapse" data-parent="#accordion" href="#S3">Season 3</a>
            </h4>
        </div>
        <div id="S3" class="panel-collapse collapse">
            <div class="panel-body">

            </div>
        </div>
    </div>
    </div>
    </div>
    <script>

        $(document).ready(function () {

            load_data();

            function load_data(epi) {
                $.ajax({
                    url: "fetch.php",
                    method: "POST",
                    data: { query: epi },
                    success: function (data) {
                        $('#result').html(data);
                    }
                });
            }
        });

    </script>
</body>

</html>

答案 9 :(得分:0)

对于我来说,解决方案是删除属性

validationQuery="select 1"

(来自(Derby DB)资源标签)。

答案 10 :(得分:0)

问题可能是由于太多用户同时访问数据库。增加可以同时访问数据库的用户数量,或者踢出现有用户(或应用程序)。使用“显示进程列表;”在主机数据库中检查已连接的用户;

我遇到了另一个原因,catalina.policy文件可能会禁止访问特定的IP / PORT

答案 11 :(得分:0)

尝试

jdbc:sqlserver://hostname:port;databaseName=TEST

在端口号前加冒号而不是逗号后,它对我有用

答案 12 :(得分:-1)

如果您使用apache tomcat 8.0版本而不是它,请使用tomcat 7.0 我曾尝试过localhost到127.0.0.1并关闭防火墙但没有工作,但是使用tomcat 7.0并且正在运行

答案 13 :(得分:-1)

我有类似的错误。更改JDBC URL以使用127.0.0.1而不是localhost帮助。

还试过更改catalina.policy文件中的条目,但这没有帮助。 我更改的条目是 - java.net.SocketPermission