데이터베이스가 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?");
}
}
답변
그래서, 당신은
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : 통신 링크 실패
java.net.ConnectException : 연결 거부
이 답변 에서 단계별 MySQL + JDBC 자습서가 포함되어 있습니다.
당신이 얻을 경우
SQLException: Connection refused
나Connection timed out
또는 MySQL의 특정을CommunicationsException:
, 다음은 DB가 전혀 도달 할 수없는 것을 의미한다. 다음 원인 중 하나 이상이 발생할 수 있습니다.
Communications link failure
- JDBC URL의 IP 주소 또는 호스트 이름이 잘못되었습니다.
- 로컬 DNS 서버가 JDBC URL의 호스트 이름을 인식하지 못합니다.
- JDBC URL에서 포트 번호가 누락되었거나 잘못되었습니다.
- DB 서버가 다운되었습니다.
- DB 서버는 TCP / IP 연결을 허용하지 않습니다.
- DB 서버에 연결이 부족합니다.
- Java와 DB 사이에 방화벽이나 프록시와 같은 연결이 차단되고 있습니다.
둘 중 하나를 해결하려면 다음 조언을 따르십시오.
- 로 확인하고 테스트하십시오
ping
.- 대신 DNS를 새로 고치거나 JDBC URL에서 IP 주소를 사용하십시오.
my.cnf
MySQL DB를 기반으로 확인하십시오 .- DB를 시작하십시오.
- mysqld가
--skip-networking option
. 없이 시작되었는지 확인하십시오 .- DB를 다시 시작하고에서 연결을 닫도록 코드를 수정하십시오
finally
.- 방화벽을 비활성화하거나 포트를 허용 / 전달하도록 방화벽 / 프록시를 구성하십시오.
또한보십시오:
답변
Java에서 힙이 부족할 때이 예외가 발생합니다. RAM에 많은 데이터 항목을 넣으려고하면 먼저 ” 통신 링크 실패 “와 ” OutOfMemoryError “를 잡습니다 .
나는 그것을 기록했고 메모리 소비를 줄였다 (1/2 데이터 삭제).
답변
필자의 경우 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");
답변
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
데이터베이스 연결이 오랫동안 유휴 상태 인 경우이 예외가 발생합니다.
이 유휴 연결은 true를 반환 connection.isClosed();
하지만 명령문을 실행하려고하면이 예외가 발생하므로 데이터베이스 풀링을 사용하는 것이 좋습니다.
답변
몇 시간 동안 같은 문제가 발생했습니다. MAMP Server를 사용하고 있습니다
localhost : [Apache Port]를 사용하는 대신 MySQL 포트를 사용하십시오.
아래는 MAMP 서버의 기본 MySQL 포트입니다.
String url = "jdbc:mysql://localhost:8889/db_name";
Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);
답변
여기서 잘못된 트리를 짖을 수도 있지만 예외는 MySQL 서버를 사용할 수 없음을 나타내는 것 같습니다.
“main”스레드의 예외 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : 통신 링크 실패 서버에 성공적으로 전송 된 마지막 패킷은 0 밀리 초 전입니다. 드라이버가 서버로부터 패킷을받지 못했습니다. 에서…
터미널에서 시도하면 어떻게됩니까?
mysql -u username -p
사용자 이름과 관련된 비밀번호를 묻는 메시지가 나타납니다. 올바른 비밀번호를 입력하면 mysql 클라이언트가 연결됩니까?
그렇지 않으면 환경 설정에서 MySQL을 시작해야 할 수도 있습니다. 시작시 실행되도록 설정할 수도 있습니다.
답변
제 경우에는 버전 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이었습니다 (예, 제품 버전을 모방하기 위해 오래되었습니다). 그래서 같은 오류가 발생했습니다.
이유가 발견되었으므로 솔루션도 발견됩니다. 버전과 일치하십시오!