com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : 통신 링크 실패


225

데이터베이스가 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?");
    }
}

17
나는 바보였다. MySQL 서버가 시작되지 않았습니다 :( 서버를 시작한 후 성공했습니다.
akfaisel

답변:


251

그래서, 당신은

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : 통신 링크 실패
java.net.ConnectException : 연결 거부

이 답변 에서 단계별 MySQL + JDBC 자습서가 포함되어 있습니다.

당신이 얻을 경우 SQLException: Connection refusedConnection timed out또는 MySQL의 특정을 CommunicationsException: Communications link failure, 다음은 DB가 전혀 도달 할 수없는 것을 의미한다. 다음 원인 중 하나 이상이 발생할 수 있습니다.

  1. JDBC URL의 IP 주소 또는 호스트 이름이 잘못되었습니다.
  2. 로컬 DNS 서버가 JDBC URL의 호스트 이름을 인식하지 못합니다.
  3. JDBC URL에서 포트 번호가 누락되었거나 잘못되었습니다.
  4. DB 서버가 다운되었습니다.
  5. DB 서버는 TCP / IP 연결을 허용하지 않습니다.
  6. DB 서버에 연결이 부족합니다.
  7. Java와 DB 사이에 방화벽이나 프록시와 같은 연결이 차단되고 있습니다.

둘 중 하나를 해결하려면 다음 조언을 따르십시오.

  1. 로 확인하고 테스트하십시오 ping.
  2. 대신 DNS를 새로 고치거나 JDBC URL에서 IP 주소를 사용하십시오.
  3. my.cnfMySQL DB를 기반으로 확인하십시오 .
  4. DB를 시작하십시오.
  5. mysqld가 --skip-networking option. 없이 시작되었는지 확인하십시오 .
  6. DB를 다시 시작하고에서 연결을 닫도록 코드를 수정하십시오 finally.
  7. 방화벽을 비활성화하거나 포트를 허용 / 전달하도록 방화벽 / 프록시를 구성하십시오.

또한보십시오:


4
MAMP / MAMP Pro는 기본적으로 MAMP_skip-networking_MAMP를 설정합니다. my.cfn
Jurik

6
이 경우가 아니라 연결 풀을 사용하고 장시간 비 활동으로 인해 연결이 닫히면 통신 링크 실패가 발생합니다. 이 경우에만 "마지막 패킷이"X "초 전에 수신되었습니다"라고 표시됩니다.
nikel

@nikel "select 1"유효성 검사 쿼리를 실행하여 연결 풀의 스레드를 활성 상태로 유지해서는 안됩니까? 축출 기가 mysql 서버 시간 초과보다 짧은 시간 간격으로 실행되도록 설정 한 경우 왜 오랫동안 비활성 상태로 닫히게됩니까?
Farhad

예, 유효성 검사 쿼리가이 문제를 해결합니다. 내 요점은 풀이 설정되지 않았고 비 활동으로 인해 풀의 연결이 시간 초과되는 경우에 관한 것입니다.
nikel

때로는 연결 문자열에서 포트가 누락되어 드라이버가 기본 3306 mysql 포트에 연결을 시도하고 mysql 이이 포트에서 실행되지 않으면 실패합니다. 내 문제 였으므로 다른 사람이 유용하다고 생각하는 경우 언급해야하지만.
Abdul Mannan

10

Java에서 힙이 부족할 때이 예외가 발생합니다. RAM에 많은 데이터 항목을 넣으려고하면 먼저 " 통신 링크 실패 "와 " OutOfMemoryError "를 잡습니다 .

나는 그것을 기록했고 메모리 소비를 줄였다 (1/2 데이터 삭제).


9

필자의 경우 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");

최신 업데이트 4/5/18 : 현재 MySQL Workbench 6.3을 사용하고 있습니다. 나는 해결책을 확인하기 위해 여기에 왔지만 혼자서 발견했다. 단지 MySQL 서버가 실행 중이 아니거나 중지 된 것입니다. 나는 서버를 다시 시작하여 매력처럼 작동했습니다.
Abhishek Ekaanth

7
이것이 왜 '최상의 솔루션'입니까? 어떤 문제를 해결합니까?
Lorne의 후작

이 솔루션은 데이터 프레임을 생성 할 수 없습니다
Alan

8

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException데이터베이스 연결이 오랫동안 유휴 상태 인 경우이 예외가 발생합니다.

이 유휴 연결은 true를 반환 connection.isClosed();하지만 명령문을 실행하려고하면이 예외가 발생하므로 데이터베이스 풀링을 사용하는 것이 좋습니다.


2
'연결 거부'와 같은 다른 이유로도 발생합니다.
Lorne의 후작

6

몇 시간 동안 같은 문제가 발생했습니다. MAMP Server를 사용하고 있습니다

localhost : [Apache Port]를 사용하는 대신 MySQL 포트를 사용하십시오.

아래는 MAMP 서버의 기본 MySQL 포트입니다.

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

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

Mysql을 설치하기 전에 문제가 없다면이 방법을 시도해보십시오
DAVIS BENNY 15MIS0426

5

여기서 잘못된 트리를 짖을 수도 있지만 예외는 MySQL 서버를 사용할 수 없음을 나타내는 것 같습니다.

"main"스레드의 예외 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : 통신 링크 실패 서버에 성공적으로 전송 된 마지막 패킷은 0 밀리 초 전입니다. 드라이버가 서버로부터 패킷을받지 못했습니다. 에서...

터미널에서 시도하면 어떻게됩니까?

mysql -u username -p

사용자 이름과 관련된 비밀번호를 묻는 메시지가 나타납니다. 올바른 비밀번호를 입력하면 mysql 클라이언트가 연결됩니까?

그렇지 않으면 환경 설정에서 MySQL을 시작해야 할 수도 있습니다. 시작시 실행되도록 설정할 수도 있습니다.


1
MAMP를 사용하여 MySQL 서버를 실행하고 있습니다. 그게 문제가 될까요?
Josh K

(Sequal Pro를 통해) 내 연결 localhost에 올바른 사용자 이름 / 암호를 사용하면 제대로 작동합니다.
Josh K

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이었습니다 (예, 제품 버전을 모방하기 위해 오래되었습니다). 그래서 같은 오류가 발생했습니다.

이유가 발견되었으므로 솔루션도 발견됩니다. 버전과 일치하십시오!


4
있을 것 같지 않게. 이러한 모든 드라이버 버전은 이전 버전과 호환되어야합니다.
Lorne의 후작

1
이 문제는 새로운 mysql 커넥터에서 수정 된 것으로 보입니다. stackoverflow.com/questions/14559794/…
Nishi

저도 마찬가지입니다. 드라이버 버전은 MySQL 5 용이고 서버 버전은 8입니다. 따라서 jar 버전을 업데이트하면 문제가 해결되었습니다.
edenPan

4

mysql 서버를 시작하지 않고 프로그램을 실행하려고했기 때문에 동일한 오류가 발생했습니다.

mysql 서버를 시작한 후 모든 것이 올바르게 진행되었습니다.


4

이전 답변이 적합합니다. 그러나 더 일반적인 문제를 지적하고 싶습니다.

나는 비슷한 문제에 직면했고 그 이유는 회사의 네트워크 제한 때문이었습니다.

다른 네트워크에있을 때 동일한 연결이 성공했습니다.


1
이 포인터는 내 문제를 해결하여 VPN에 연결할 때 'localhost'가 작동했지만 VPN에서 연결을 끊으면 동일하게 작동하지 않지만 'localhost'를 '127.0.0.1'로 변경하여이 문제를 해결했습니다.
gannu_lee

4

/etc/mysql/my.cnf 파일에서 IP 주소를 업데이트하십시오

bind-address  = 0.0.0.0

mysql deamon 및 mysql 서비스를 다시 시작하십시오.


1
유효한 바인드 주소를 사용하도록 편집
OneCricketeer

3

다운로드 MySQL을 JDBC 형-4-Treiber에 (IG 'MySQL의 커넥터 - 자바-5.1.11-bin.jar를'mysql-connector-java-5.1.11.zip '에서)에서 MySQL을 .

클래스 경로에서 컴파일 및 런타임 중에 드라이버 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" );

아니, 아무것도 찾지 못하는 오류가 발생합니다. JAR 파일없이 이것을 가져올 수 있습니까?
Josh K

@ 조쉬 작동하지만 클래스 경로를 올바르게 설정하면됩니다. (또는 항아리를 % JAVA_HOME % \ jre \ lib \ ext 디렉토리에 복사하지만 이는 나쁜 습관으로 간주됩니다)
스태커

3

이 오류는 Java가 SSL을 통해 MySQL에 연결하려고 시도하는 경우에도 발생할 수 있지만 문제가 발생합니다. (필자의 경우 Payara Server 5.193.1 연결 풀을 MySQL로 구성하고있었습니다.)

어떤 사람들은 설정을 제안했습니다 useSSL=false. 그러나 Connector / J 버전 8.0.13이므로 해당 설정은 더 이상 사용되지 않습니다. 다음은 MySQL Connector / J 8.0 구성 속성 에서 발췌 한 내용입니다 .

sslMode

기본적으로 네트워크 연결은 SSL 암호화입니다. 이 속성을 사용하면 보안 연결을 해제하거나 다른 수준의 보안을 선택할 수 있습니다. 다음 값이 허용됩니다 DISABLED.-암호화되지 않은 연결을 설정하십시오. PREFERRED-(기본값) 서버에서 활성화 한 경우 암호화 된 연결을 설정하고 그렇지 않으면 암호화되지 않은 연결로 대체합니다. REQUIRED-서버가 활성화 한 경우 보안 연결을 설정하고 그렇지 않으면 실패합니다. VERIFY_CA- REQUIRED구성된 인증 기관 (CA) 인증서와 비교하여 서버 TLS 인증서를 확인하지만 추가로 확인하십시오. VERIFY_IDENTITY-과 VERIFY_CA같지만 추가로 서버 인증서가 연결을 시도하는 호스트와 일치하는지 확인하십시오.

이 특성은 더 이상 사용되지 않는 레거시 특성 useSSL, requireSSL및을 대체하며,이 특성 verifyServerCertificate은 여전히 ​​허용되지만 명시 적으로 설정되지 않은 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_CA. 에 해당하는 기존 설정이 없습니다 sslMode=VERIFY_IDENTITY. 모든 서버 버전의 기본 설정에 대한 그, 참고 sslMode입니다 PREFERRED, 그것은의 기존 설정에 해당 useSSL=true, requireSSL=false그리고verifyServerCertificate=false경우에 따라 Connector / J 8.0.12 및 이전 버전의 기본 설정과 다릅니다. 레거시 속성을 계속 사용하고 이전 기본 설정을 사용하는 응용 프로그램을 검토해야합니다.

sslMode명시 적으로 설정된 경우 레거시 속성이 무시됩니다 . 아무도 경우 sslMode또는이 useSSL명시 적으로 설정되어 있지 않은, 기본 설정이 sslMode=PREFERRED적용됩니다.

기본값 :PREFERRED

버전 이후 : 8.0.13

따라서 제 경우 sslMode=DISABLED에는 문제를 해결하는 데 필요한 모든 것이 설정 되었습니다. 이것은 테스트 머신에있었습니다. 그러나 프로덕션 환경에서 보안 솔루션은 SSL을 사용하도록 Java 클라이언트 및 MySQL 서버를 올바르게 구성하는 것입니다.


SSL을 비활성화하면을 설정해야 할 수도 있습니다 allowPublicKeyRetrieval=true. (다시 말해서 보안 관점에서 현명한 결정은 아닙니다). 자세한 정보는 MySQL ConnectionString 옵션 에서 제공됩니다 .

AllowPublicKeyRetrieval

사용자 계정이 sha256_password인증을 사용 하는 경우 전송 중에 비밀번호를 보호해야합니다. 이를 위해서는 TLS가 선호되는 메커니즘이지만,이를 사용할 수없는 경우 RSA 공개 키 암호화가 사용됩니다. 서버의 RSA 공개 키를 지정하려면 ServerRSAPublicKeyFile연결 문자열 설정 AllowPublicKeyRetrieval=True을 사용하거나 클라이언트가 서버에서 공개 키를 자동으로 요청할 수 있도록 설정 하십시오. 참고 AllowPublicKeyRetrieval=True악의적 인 프록시, 일반 텍스트 암호를 얻을 수있는 MITM 공격을 수행 할 수 있도록 할 수는 그래서 기본적으로 False입니다 명시 적으로 활성화해야합니다.


에서 관련 스레드 Payara 서버 GitHub의 .
MS Dousti

3

내 같은 문제는 다음 단계로 해결됩니다.

  1. 이동 my.cnf

    vi /etc/mysql/my.cnf
  2. 바인드 주소 수정

    "bind-address = 0.0.0.0"
  3. MySQL 재시작

    sudo /etc/init.d/mysql restart

2

mysql 데이터베이스를 설치하기 위해 WAMP또는 XAMP서버를 사용하는 경우 그런 다음 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure데이터베이스와 연결하는 동안 mysql 서버를 명시 적으로 시작해야 합니다.


2

나는이 문제를 쉬운 방법으로 해결했다. "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : 통신 링크 실패"라는 seme 문제가있었습니다. 내 db.properties 파일에서 나는 이것을 가지고 있었다 : url : jdbc : mysql : // localhost : 90 / myDB, 포트 url 만 제거하여 다음과 같은 방식으로 url : jdbc : mysql : // localhost / myDB. .


2

my.ini 및 php.ini 파일에서 mysql 포트를 3306에서 3307로 변경했을 때 문제가 발생했지만 포트 (3307-> 3306)를 변경 한 후에 다시 정상적으로 작동했습니다.


2

포트를 변경 한 경우 "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : Communications link failure"오류가 발생합니다. 포트 번호를 확인하십시오.


1

방금 이것을 경험했습니다.

다음과 같이 작동시킵니다. (정적 블록 초기화 도구에 배치 가능)

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

문안 인사.


2
정적 블록은 2007 년 이후 필요하지 않았으며 로그인 매개 변수를 어느 쪽이든 지정할 수 있습니다.
Lorne의 후작

1

변경 시도 localhost127.0.0.1.

로컬 호스트는로 확인됩니다 ::1. 그리고 MySQL은 기본적으로 IPv6을 통해 연결할 수 없습니다.

그리고 여기에 출력이 있습니다 telnet localhost 3306:

$ telnet localhost 3306
Trying ::1...

그리고 MySQL 서버로부터 응답이 없습니다.

물론, MySQL 서버가 실행 중인지 확인하십시오.


실제로 Mysql이 아닌 / etc / hosts 파일에 문제가 있습니다
OneCricketeer

@ cricket_007 기본적으로 localhost는 127.0.0.1 대신 :: 1로 확인됩니다.
Haozhe Xie

1
물론 ipv6이 활성화되어 있고 hosts 파일에 따라
OneCricketeer

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 이상의 사용자가 커넥터를 업데이트 한 경우


이것은 MySQL 드라이버 8 이상을 사용할 때 연결 문자열에 useSSL = false를 추가하는 정답입니다.
Mohannd

1

에 대한 MySQL에 원격 호출

  1. 추가 원격 사용자MySQL을 exemple IP = remoteIP에에서 :

    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
  2. 원격 액세스 허용MySQL에 (기본적으로 모든 외부 호출은 허용되지 않음) :

    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
  3. 최신 버전의 JDBC 드라이버 인 JDBC :

    jdbc.url='jdbc:mysql://remoteIP:3306/yourDbInstance?autoReconnect=true&amp;useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC'
    jdbc.user='theNewUser'

0

나는 같은 문제를 겪었고 여기에 그것이 어떻게 고쳐 졌는가 :

  1. 내 .jsp는 아직 서블릿에서 정의하지 않은 속성을 호출했습니다.
  2. ResultSet (getString("columnName"))데이터베이스의 열 이름과 일치하지 않는 두 개의 열 이름이 객체로 전달되었습니다 .

어느 것이 문제를 해결했는지 확실하지 않지만 효과가 있습니다. 또한, 새로운 만들 수 있는지 확인 Statement하고 ResultSet각 테이블 쿼리를.


1
(1) 확실히이 문제를 일으키지 않습니다.
Lorne의 후작

0

간단한 항아리 문제 일 수 있습니다. mysql-connector-java-XXX-bin.jar현재 mysql 버전에서 지원하지 않는 이전 버전을 사용 중일 수 있습니다 . 내가 사용하는 mysql-connector-java-5.1.18-bin.jar내가 사용으로 mysql 5.5이 문제는 나를 위해 해결됩니다.


1
예, 항아리가 일치하지 않을 수 있습니다.
Kiran Nunna

이 모든 드라이버 버전은 호환되어야합니다.
Lorne의 후작

0

아마 Mysql과 Apache Server를 시작하지 않았을 수도 있습니다. XAMPP 제어판에서 Apache 서버와 Mysql을 시작한 후 연결이 설정되었습니다.

행운을 빕니다!


0

나를 위해 해결 한 것은 2 가지 일을하고 있습니다 : 1. 다음 connad를 사용하여 암호가 아닌 root 이외의 새 사용자를 만드십시오.

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

2. mysqld.conf의 IP 주소 줄 주석

그런 다음 새 사용자 이름과 비밀번호로 연결하십시오. 작동해야합니다.


모든 원격 사용자에 대해이를 반복하거나 Localhost
OneCricketeer

0

이전 버전의 MySQL ( 'version', '5.1.73')에 연결하려고했습니다. 최신 드라이버 버전을 사용하면 "com.mysql.cj.jdbc.Driver 를 사용 하거나 사용중인 드라이버 를 지정하지 않아도된다는 오류가 발생합니다 .

클래스 com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver ' 로드 중 . 드라이버는 SPI를 통해 자동으로 등록되며 드라이버 클래스의 수동로드는 일반적으로 필요하지 않습니다.

5.1.38 버전의 mysql-connector-java를 사용하도록 선언을 변경했으며 코드에서 com.mysql.jdbc.Driver를 유지했습니다 .

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

Ankit Jain의 답변을 보았을 때 모두 시작되었습니다.


0

내 방화벽이 MySQL이 수신하는 3307 게시물을 차단하고있었습니다. 포트를 3307에서 3306으로 변경 한 후 데이터베이스에 성공적으로 연결할 수 있습니다.


0

내 MacBook에서 Eclipse EE의 새 버전을 다시 설치하고 xamp mysql 또는 mamp와 같은 로컬 서버를 제거 할 때만이 오류를 해결했지만 그중 하나만 사용합니다 ...


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과 voila를 다시 시작하여 문제를 해결하려고했습니다.


0

다음과 같은 여러 가지 오류가 발생했습니다.

  • CommunicationsException: Communications link failure
  • java.lang.NullPointerException: Attempt to invoke interface method 'java.sql.Statement java.sql.Connection.createStatement()' on a null object reference at.

나는 추가해야했다 :

  • AndroidManifest.xml <uses-permission android:name="android.permission.INTERNET"/>에서 시작 매니페스트 태그 바로 뒤에 포함 합니다.

  • JDBC 드라이버를 Gradle (또는 Maven) 종속성에 추가하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.