🍁DB 접속
참조 변수 생성 및 import
Connection conn = null;
Connection으로 conn 참조 변수를 하나 만들고, java.sql 인터페이스로 import를 한다.
이제 연결 문자열(Connection String)을 만들어야 한다.
연결 문자열 (Connection String)
DB 서버 접속
- 호스트명: 서버 IP or 도메인 주소 (localhost)
- 포트번호: 1521
- SID: xe
- 드라이버: thin
- 사용자: hr
- 암호: java1234
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String id = "hr";
String pw = "java1234";
연결 문자열에는 DB 서버에 접속하는 모든 정보가 들어간다.
이렇게 하면 DBeaver에서 접속했던 것처럼 모든 정보가 확보된다.
JDBC 드라이버 로딩
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (Exception e) {
e.printStackTrace();
}
드라이버 로딩은 관련 클래스 정보를 인식하는 작업이다.
외부 입출력은 예외 처리가 필수이므로 try catch 문을 작성하는데, JDBC는 모두 예외 미루기가 들어 있어서 try catch 문이 없으면 오류가 발생한다.
Connection 객체 생성
conn = DriverManager.getConnection(url, id, pw);
Connection 객체를 만들 때에는 DriverManager라는 클래스를 사용하며, 클래스에 들어 있는 getConnection 메서드가 Connection 객체를 만들어서 돌려준다.
Connection 객체 생성과 동시에 오라클 접속이 완료된다. 이제 Connection 객체 안에는 오라클 상태를 관리하는 정보가 들어 있게 된다.
접속 상태 확인
System.out.println(conn.isClosed());
isClosed 메서드는 연결이 되어 있으면 false, 연결이 안 되어 있으면 true를 반환한다.
질의 및 업무
System.out.println("질의(SQL) 실행");
접속 종료
conn.close();
System.out.println(conn.isClosed());conn.close();
접속이 종료되어 있을 때에는 true를 반환해야 한다.
전체 코드
package com.test.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
public class Ex01 {
public static void main(String[] args) {
Connection conn = null;
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String id = "hr";
String pw = "java1234";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, id, pw);
System.out.println(conn.isClosed());
System.out.println("질의(SQL) 실행");
conn.close();
System.out.println(conn.isClosed());
} catch (Exception e) {
e.printStackTrace();
}
}
}
실행이 되면 위와 같이 출력된다.
🍂재사용성을 높인 DB 접속 코드
main
package com.test.jdbc;
import java.sql.Connection;
public class ex02 {
public static void main(String[] args) {
//1. DB 연결
//2. DB 연결 확인
//3. DB 연결 종료
Connection conn = null;
try {
conn = DBUtill.open();
System.out.println(conn.isClosed());
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
DBUtill
package com.test.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
public class DBUtill {
private static Connection conn;
public static Connection open() {
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String id = "hr";
String pw = "java1234";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, id, pw);
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static Connection open(String server, String id, String pw) {
String url = "jdbc:oracle:thin:@" + server + ":1521:xe";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, id, pw);
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
재사용성을 높이기 위해 DBUtill 클래스에 DB를 접속하는 역할을 맡긴다.
연결 문자열을 만들면서 커넥션 객체를 만드는 일련의 작업을 메소드에 넣고, return 타입으로 연결된 Connection 객체를 돌려줄 수 있도록 한다.
그리고 메소드 오버로딩하여 특정 서버에 접속하고 싶을 때, server, id, pw를 입력하여 접속할 수 있게 했다.
🍁오류 해결
호스트 오류
- java.sql.SQLRecoverableException
- IO 오류: The Network Adapter could not establish the connection
알려진 호스트가 없다는 에러가 발생한다.
포트번호 오류
- Connection refused: connect
- IO 오류: The Network Adapter could not establish the connection
연결이 거절되었다는 에러가 발생한다.
연결 문자열 오류
- java.sql.SQLException: 부적합한 Oracle URL이 지정되었습니다
연결 문자열 ':'을 작성하지 않았을 경우 부적합한 Oracle URL이 지정되었다는 에러가 발생한다.
SID 오류
- TNS:listener does not currently know of SID given in connect descriptor
SID를 xe가 아니라 xi처럼 잘못 작성하는 경우 SID 관련 오류가 발생한다.
아이디/암호 오류
- ORA-01017: invalid username/password; logon denied
아이디나 암호를 틀린 경우 username/password가 유효하지 않아 로그인이 거절되었다는 메시지가 출력된다.
드라이버 오류
- java.lang.ClassNotFoundException: oracle.jdbc.driver.oracleDriver
드라이버의 대문자를 소문자 등으로 잘못 작성한 경우 클래스를 찾을 수 없다는 에러가 발생한다.
오라클 중지 오류
- java.sql.SQLException: Listener refused the connection with the following error: ORA-12505
- TNS:listener does not currently know of SID given in connect descriptor
오라클 서버가 꺼져 있는 경우 접속 에러가 발생한다.
Listener에 대한 오류가 발생하면 첫 번째로 오라클이 중지되어 있지는 않은지부터 확인해보도록 한다.
ojdbc.jar 미설치 오류
- java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
ojdbc.jar를 참조하지 않은 상태에서는 드라이버가 없다는 에러가 발생한다.