com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败

时间:2010-06-06 05:49:11

标签: 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. 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

测试文件的内容:

import com.mysql.jdbc.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SqlTest {

    public static void main(String [] args) throws Exception {
        // Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
        // // edit the jdbc url 
        Connection conn = DriverManager.getConnection( 
            "jdbc:mysql://localhost:3306/projects?user=user1&password=123");
        // Statement st = conn.createStatement();
        // ResultSet rs = st.executeQuery( "select * from table" );

        System.out.println("Connected?");
    }
}

42 个答案:

答案 0 :(得分:217)

所以,你有一个

  

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

我引用this answer,其中还包含一步一步的MySQL + JDBC教程:

  

如果您获得SQLException: Connection refusedConnection timed out或MySQL特定CommunicationsException: Communications link failure,则表示根本无法访问该数据库。这可能有以下一个或多个原因:

     
      
  1. JDBC URL中的IP地址或主机名错误。
  2.   
  3. 本地DNS服务器无法识别JDBC URL中的主机名。
  4.   
  5. JDBC URL中缺少或错误端口号。
  6.   
  7. 数据库服务器已关闭。
  8.   
  9. 数据库服务器不接受TCP / IP连接。
  10.   
  11. 数据库服务器已用完连接。
  12.   
  13. Java和DB之间的某些东西阻止了连接,例如防火墙或代理。   

  14.         

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

         
        
    1. 使用ping验证并测试它们。
    2.   
    3. 刷新DNS或在JDBC URL中使用IP地址。
    4.   
    5. 根据MySQL DB的my.cnf进行验证。
    6.   
    7. 启动数据库。
    8.   
    9. 验证mysqld是否在没有--skip-networking option的情况下启动。
    10.   
    11. 重新启动数据库并相应地修改代码,以关闭finally
    12. 中的连接   
    13. 禁用防火墙和/或配置防火墙/代理以允许/转发端口。   

    14.   

另见:

答案 1 :(得分:8)

当Java出堆时我抓住了这个异常。如果我尝试在RAM中放入许多数据项 - 首先我抓住“通信链接失败”,然后“ OutOfMemoryError ”。

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

答案 2 :(得分:8)

这是最佳解决方案,

 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");

将Localhost替换为您的IP地址

答案 3 :(得分:7)

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

这个空闲连接在connection.isClosed();上返回true但如果我们尝试执行语句,那么它将触发此异常,因此我建议使用数据库池。

答案 4 :(得分:5)

我可能在这里咆哮错误的树,但你的异常似乎表明你的MySQL服务器不可用。

  

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

如果您尝试(从终端)

会发生什么
mysql -u username -p

系统将提示您输入与用户名关联的密码。在你给出正确的密码后,mysql客户端连接了吗?

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

答案 5 :(得分:5)

就我而言,结果是mysql-connector-java的版本太旧了。

在我的演示中,我以某种方式使用mysql-connector-java这样:

<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>

我的MySQL版本是5.1.48(是的,它很旧,只是为了模仿产品版本)。所以我遇到了同样的错误。

由于找到了原因,也找到了解决方案。匹配版本!

答案 6 :(得分:5)

我几个小时都遇到了同样的问题。我正在使用MAMP服务器

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

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

String url = "jdbc:mysql://localhost:8889/db_name";

Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);

答案 7 :(得分:4)

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

bind-address  = <IP_ADDRESS>

重启mysql deamon和mysql服务。

答案 8 :(得分:4)

早期答案是恰当的。但是,我还想指出一个更普遍的问题。

我遇到了类似的问题,原因是我公司的网络限制。

当我在任何其他网络时,相同的连接获得了成功。

答案 9 :(得分:3)

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

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

答案 10 :(得分:3)

在{{3}下载MySQL-JDBC-Type-4-Treiber(来自'mysql-connector-java-5.1.11.zip'的ig'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" );

答案 11 :(得分:3)

我的同样问题通过以下步骤解决:

  1. 转到my.cnf

    vi /etc/mysql/my.cnf

  2. 修改其bind-address

    "#bind-address = 127.0.0.1"

  3. 重启mysql

    sudo /etc/init.d/mysql restart

答案 12 :(得分:2)

如果您使用WAMPXAMP服务器来安装mysql数据库。 然后你必须明确启动mysql服务器,否则它将显示 与数据库连接时com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

答案 13 :(得分:2)

如果您更改了端口,则会出现此类错误“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure” 请检查您的端口号

答案 14 :(得分:2)

刚刚经历过这个。

通过以下方式使其工作: (这可以放在静态块初始化器中)

static{ // would have to be surrounded by try catch
    Class.forName("com.mysql.jdbc.Driver");   // this will load the class Driver
}

同样通过以下方式获得连接:

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

而不是指定登录参数

  Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/projects?user=user1&password=123");

问候。

答案 15 :(得分:2)

我以一种简单的方式解决了这个问题,这对我有用。我有seme问题“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure”。在我的db.properties文件中,我有这个:url:jdbc:mysql:// localhost:90 / myDB, 只删除了端口url,导致这种方式url:jdbc:mysql:// localhost / myDB,这对我有用。

答案 16 :(得分:2)

当我在my.ini和php.ini文件中将mysql端口从3306更改为3307但在更改端口(3307-> 3306)后再次正常工作时,就发生了这种情况。

答案 17 :(得分:1)

尝试将localhost更改为127.0.0.1

localhost将被解析为::1。默认情况下,MySQL无法通过IPv6连接。

以下是telnet localhost 3306

的输出
$ telnet localhost 3306
Trying ::1...

MySQL服务器没有响应。

当然,请确保您的MySQL服务器正在运行。

答案 18 :(得分:1)

对于远程调用Mysql

  1. 远程用户添加到 Mysql 中,例如IP = remoteIP:

    ViewController
  2. 允许对MySQL的远程访问(默认情况下,不允许所有外部调用):

    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
    
  3. 对于最新版本的JDBC驱动程序,JDBC:

    Edit 
    /etc/mysql/mysql.conf.d/mysqld.cnf    or    /etc/mysql/my.cnf
    Change line:  bind-address = 127.0.0.1   to
                  #bind-address = 127.0.0.1
    Restart Mysql: /etc/init.d/mysql restart
    

答案 19 :(得分:1)

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);

如果mysql版本8或更高版本的用户更新了连接器

答案 20 :(得分:1)

如果Java尝试通过SSL连接到MySQL,也可能发生此错误,但是出了点问题。 (就我而言,我正在配置Payara Server 5.193.1与MySQL的连接池。)

有人建议设置useSSL=false。但是,由于Connector / J版本8.0.13,该设置已被弃用。以下是MySQL Connector/J 8.0 Configuration Properties的摘录:

  

sslMode

     

默认情况下,网络连接经过SSL加密;此属性允许关闭安全连接,或选择其他级别的安全性。允许使用以下值:DISABLED-建立未加密的连接; PREFERRED-(默认)如果服务器启用了加密连接,则建立它们,否则退回到未加密的连接; REQUIRED-如果服务器启用了安全连接,则建立安全连接,否则将失败; VERIFY_CA-与REQUIRED相似,但还要对照已配置的证书颁发机构(CA)证书验证服务器TLS证书; VERIFY_IDENTITY-与VERIFY_CA类似,但还要验证服务器证书是否与尝试连接的主机匹配。

     

此属性替换了已弃用的旧版属性useSSLrequireSSLverifyServerCertificate,这些属性仍然可以接受,但是如果sslMode会转换为sslMode的值未明确设置:useSSL=false转换为sslMode=DISABLED{"useSSL=true", "requireSSL=false", "verifyServerCertificate=false"}转换为sslMode=PREFERRED{"useSSL=true", "requireSSL=true", "verifyServerCertificate=false"}转换为sslMode=REQUIRED{"useSSL=true" AND "verifyServerCertificate=true"}被翻译为sslMode=VERIFY_CAsslMode=VERIFY_IDENTITY没有等效的旧设置。请注意,对于所有服务器版本,sslMode的默认设置为PREFERRED,它等效于useSSL=truerequireSSL=false和{{1}的旧设置。 },在某些情况下与Connector / J 8.0.12及更早版本的默认设置不同。应当继续使用继续使用旧属性并依赖其旧的默认设置的应用程序。

     

如果显式设置verifyServerCertificate=false,则遗留属性将被忽略。如果未明确设置sslModesslMode中的任何一个,则将应用useSSL的默认设置。

     

默认sslMode=PREFERRED

     

自版本:8.0.13

因此,就我而言,设置PREFERRED是解决问题所需的全部。 这是在测试机器上。但是对于生产而言,安全的解决方案将是正确配置Java客户端和MySQL服务器以使用SSL。


请注意,通过禁用SSL,您可能还必须设置sslMode=DISABLED。 (再次,从安全角度来看,这不是明智的决定)。在MySQL ConnectionString Options中提供了更多信息:

  

AllowPublicKeyRetrieval

     

如果用户帐户使用allowPublicKeyRetrieval=true身份验证,则在传输过程中必须保护密码; TLS是实现此目的的首选机制,但是如果它不可用,则将使用RSA公钥加密。要指定服务器的RSA公钥,请使用sha256_password连接字符串设置,或设置ServerRSAPublicKeyFile以允许客户端自动从服务器请求公钥。请注意,AllowPublicKeyRetrieval=True可能允许恶意代理执行MITM攻击以获取纯文本密码,因此默认情况下为False,必须明确启用它。

答案 21 :(得分:0)

我通过降级jdk版本解决了这个问题。 从 11.0.11 降级到 11.0.10 或更旧的 Java 版本

答案 22 :(得分:0)

我收到多个错误,例如:

  • string str = "Data Source=(local);Initial Catalog=Northwind;" + "Integrated Security=SSPI"; string queryString = "SELECT price FROM price WHERE service ... "; using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand command = new SqlCommand(queryString, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); // Call Read before accessing data. while (reader.Read()) { ReadSingleRow((IDataRecord)reader); } // Call Close when done reading. reader.Close(); }
  • CommunicationsException: Communications link failure

我必须添加:

  • 在AndroidManifest.xml中,在开始清单标记之后紧随java.lang.NullPointerException: Attempt to invoke interface method 'java.sql.Statement java.sql.Connection.createStatement()' on a null object reference at

  • 将JDBC驱动程序添加到您的Gradle(或Maven)依赖项中。

答案 23 :(得分:0)

我有相同的连接错误: 我的问题是我使用MySQL 8.0.15,但Java连接器是5.x.x。

下面是我如何解决Router.php <?php class Router { protected $routes = []; public static function load($file) { $router = new static; require $file; return $router; } public function define($routes) { $this->routes = $routes; } public function direct($uri) { if (array_key_exists($uri, $this->routes)) { return $this->routes[$uri]; } throw new Exception('No route defined for this URI.'); } } ?> 。 1.下载8.0.15。从Maven存储库: https://search.maven.org/search?q=g:mysql%20AND%20a:mysql-connector-java

  1. 在Eclipse IDE中,在资源管理器中选择“参考库” 鼠标右键>构建路径>配置构建路径 一种。删除“ mysql-connector-5.x.jar” b。单击“添加外部JAR ...”,然后选择mysql-connector-java-8.0.15.jar。

重新运行它,问题就消失了。\

答案 24 :(得分:0)

  

示例jdbc连接类文件。要获得连接时,只需调用getConnection方法。包括相关的mysql-connector.jar

import java.sql.Connection;
import java.sql.DriverManager;


public class DBConnection {

    public Connection getConnection() {
        Connection con = null;

        String dbhost;
        String user;
        String password;
// get properties
dbhost="jdbc:mysql://localhost:3306/cardmaildb";
user="root";
password="123";

 System.out.println("S=======db Connecting======");

        try {
            Class.forName("com.mysql.jdbc.Driver");

            con = DriverManager.getConnection(dbhost, user, password);
            //if you are facing with SSl issue please try this 
            //con = DriverManager.getConnection("jdbc:mysql://192.168.23.100:3306/cardmaildb?useUnicode=yes&characterEncoding=UTF-8&useSSL=false",user, password);

        } catch (Exception e) {
            System.err.println("error in connection");
            e.printStackTrace();
        }
        System.out.println("E=======db Connecting======");
        return con;
    }

    public static void main(String[] args) {
        new DBConnection().getConnection();
    }
}

答案 25 :(得分:0)

就我而言,当我尝试从同一主机连接到在Ubuntu主机VM的容器内运行的mysql-server时遇到此错误。

示例: 如果我的虚拟机名称为abc.company.com,则以下jdbc URL 不起作用

jdbc:mysql://abc.company.com:3306/dbname

在类似xyz.company.com的其他计算机上,jdbc url可以正常工作,但在abc.company.com上则不能。

abc.company.com机器上,以下jdbc URL 可以正常工作

jdbc:mysql://localhost:3306/dbname

这导致我检查了/etc/hosts文件。

/etc/hosts中添加以下行可解决此问题:

127.0.1.1 abc.company.com abc

这似乎是一个操作系统错误,需要我们在某些Ubuntu版本中添加它们。 参考:https://www.debian.org/doc/manuals/debian-reference/ch05.en.html#_the_hostname_resolution

在尝试此操作之前,我尝试了所有其他解决方案,例如GRANT ALL..,更改了mysql.cnf中的bind-address行。在这种情况下,它们都没有帮助我。

答案 26 :(得分:0)

就我而言,事实证明mysql-connector-java的版本不同。 我刚刚将mysql jdbc更改为maria jbdc

旧的jdbc驱动程序

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.21</version>
</dependency>


新的Jdbc驱动程序

<!-- 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>

答案 27 :(得分:0)

这个问题有很多答案,我认为我的问题更适合另一个问题,但该问题的答案是固定的。它指向此线程。

为我解决的是将&createDatabaseIfNotExist=true附加到spring.datasource.url中的application.properties字符串中。

这非常棘手,因为它在几个不同的,怪异的,看似无关的错误中表现出来,并且当我尝试修复它抱怨的内容时,只会弹出另一个错误,或者是无法修复该错误。它抱怨无法加载JDBC,说它不在类路径中,但是我以大约30种不同的方式将其添加到类路径中,并且已经可以进行桌面办公了。

答案 28 :(得分:0)

就我而言,解决方案是将预期的 TLS 协议添加到连接字符串中,如下所示:

jdbc:mysql://localhost:3306/database_name?enabledTLSProtocols=TLSv1.2

答案 29 :(得分:0)

我在远程 Jenkins 服务器上运行自动化测试时遇到了这个问题。然而,在本地运行测试时没有发生任何问题。

对我来说,这个问题是在将 mysql-connector 版本更新到 POM 文件中的最新版本后解决的,因为 MySQL 版本在服务器端发生了变化。

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.24</version>
</dependency>

但是调试起来有点困难,几乎花了两天时间,因为我不知道 MySQL 版本的变化,而且它在本地运行良好。

答案 30 :(得分:0)

在我的情况下,我必须建立到远程数据库的ssh隧道,并且所有设置都是正确的,并且与PhpStorm的连接测试也成功。并且还加载了架构,但未加载数据。相反,我得到了:

[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.

以上建议均无效。出于任何原因,我都试图通过简单地重新启动PhpStorm来解决该问题,瞧!

答案 31 :(得分:0)

打开文件/etc/mysql/my.cnf: 从

更改以下参数

bind-address = 127.0.0.1 to bind-address = 192.168.0.3 #this is your local system IP Address

在mysql中为特定IP地址运行以下命令->

grant all privileges on dbname.* to dbusername@'192.168.0.3' IDENTIFIED BY 'dbpassword';                      

如果要授予对所有IP地址的访问权限,请运行以下命令:

grant all privileges on dbname.* to dbusername@'%' IDENTIFIED BY 'dbpassword'; 

答案 32 :(得分:0)

启动应用程序时我遇到了同样的问题,

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.

问题在于,在mysql文件 /etc/mysql/mysql.conf.d/mysqld.cnf 中,配置是这样的

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
log-error       = /var/log/mysql/error.log
# By default we only accept connections from localhost
bind-address    = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

因此我们可以看到绑定地址指向127.0.0.1,因此对于启动您的应用程序,一个简单的解决方案是我们可以使用 jdbc:mysql://127.0.0.1:3306 / pizzeria 而不是 jdbc:mysql:// localhost:3306 / pizzeria ,它将把mysql连接到应用程序或另一个解决方案是您可以检查并将mysql配置更改为默认配置。能行得通。 我希望它也对你们有用。

答案 33 :(得分:0)

在我的MacBook中,只有重新安装新版本的eclipse EE并删除本地服务器(如xamp mysql或mamp,但仅使用其中之一)时,我才能解决此错误。

答案 34 :(得分:0)

我的防火墙阻止了我的MySQL监听的帖子3307。所以我将端口从3307更改为3306.然后我可以成功连接到数据库。

答案 35 :(得分:0)

它试图连接到旧版本的MySQL('版本','5.1.73' );当您使用较新的驱动程序版本时,您会收到一条错误消息,告诉您使用“com.mysql.cj.jdbc.Driver ,甚至您无需指定使用哪一个:< / p>

  

加载类com.mysql.jdbc.Driver'. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver'。司机是   通过SPI自动注册并手动加载驱动程序   上课通常是不必要的。

我更改了声明以使用mysql-connector-java的5.1.38版本,并且在代码中,我保留了 com.mysql.jdbc.Driver

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

当我看到Ankit Jain的answer

时,一切都开始了

答案 36 :(得分:0)

为我解决的是做两件事:  1.使用以下connads创建除root之外的新用户:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;

2。注释mysqld.conf上的IP地址行

然后用新的用户名和密码连接。它应该工作。

答案 37 :(得分:0)

也许你没有启动你的Mysql和Apache Server。从XAMPP控制面板启动Apache服务器和Mysql后,连接成功建立。

祝你好运!

答案 38 :(得分:0)

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

答案 39 :(得分:0)

我遇到了同样的问题,这是如何修复的:

  1. 我的.jsp正在调用我尚未定义的属性 的servlet。
  2. 我有两个列名,我通过ResultSet (getString("columnName"))传递给一个与我的数据库中的列名不匹配的对象。
  3. 我不确定哪一个解决了这个问题,但它确实奏效了。另外,请确保为每个表查询创建新的StatementResultSet

答案 40 :(得分:-1)

如果有任何读者在访问远程服务器时遇到此问题:请确保端口已打开

答案 41 :(得分:-2)

您的服务器也可能刚刚关闭。在Mac上,通过聚光灯导航至mySQL首选项面板。在那里,选中该复选框以在计算机启动时启动服务器并启动服务器。