org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLRecoverableException: IO ����: The Network Adapter could not establish the connection
오류 원인: 애플리케이션과 Oracle DB 네트워크 연결 실패 아래 항목들 하나씩 확인
# OracleServiceXE, OracleXETNSListener 실행중이 아님
위의 2번으로 해결
# Listener는 떠 있는데 포트번호나 SID가 틀린 경우
SqlDeveloper의 DB 접속 화면 / servlet-content.xml의 DB 로그인 설정 코드
servlet-content.xml에서 url 마지막에 포트번호와 SID가 일치하는지 확인
참고로 SID 방식이 아닌 서비스 이름(SERVICE_NAME) 방식이면 ':' → '/' 변경
JdbcTest.java 파일 우클릭 → Run 'JdbcTest.main()' → 콘솔 확인
'DB 연결 성공'이 뜨면 JDBC 연결에는 문제 없음
import java.sql.Connection;
import java.sql.DriverManager;
public class JdbcTest {
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:XE",
"DB 접속할 때 사용한 이름",
"DB 접속할 때 사용한 비밀번호"
);
System.out.println("DB 연결 성공");
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
이 프로젝트에서 나타난 JDBC 연결 오류
java.sql.SQLRecoverableException: IO 오류 The Network Adapter could not establish the connection Caused by: java.net.ConnectException: Connection refused
오류 원인: DB 연결 자체가 안됨 / 주소 설정 오류 / Listener 실행중 아님 만약 위의 3가지를 모두 확인했는데도 안되면 아래 단계 확인
# Listener 등록 문제
Listener 상태 확인
관리자 권한 cmd → 'lsnrctl status' 입력
정상적으로 XE가 떠있음
Service에 XE 있는지 확인 후 위와 같이 있으면 정상 실행됨, 없으면 추가해줘야 함
Listener에 XE 추가 방법
XE 실행 및 확인
관리자 권한 cmd→ 'sqlplus / as sysdba' 입력 → 'startup;' 입력 → 'select instance_name, status from v$instance;'입력
결과가 'XE | OPEN' 뜨면 정상적으로 실행중
XE 강제 추가 방법
1) 수동 추가
관리자 권한 cmd→ 'sqlplus / as sysdba' 입력→ ' alter system register;' 입력
2) 리스너 재시작
관리자 권한 cmd→ 'lsnrctl stop' 입력 → 'lsnrctl start' 입력
3) CMD로 LOCAL_LISTENER 설정
관리자 권한 cmd→ 'sqlplus / as sysdba' 입력→ 'show parameter local_listener;' 입력
결과로 값이 비어있거나 이상하면
'alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope=both;' 입력 → 'alter system register;' 입력