DBConn.java 데이터베이스 연결 및 오류 잡기 (The Network Adapter could not establish the connection)
::::특별한 Java Story 2013. 6. 12. 19:32 |/*
DBConn.java
*/
//싱글톤 패턴을 이용한 Database 연결 객체 생성 전용 클래스
// --> DB 연결 과정이 가장 부하가 크기 때문에
// 한번 연결된 객체를 계속 사용하는 것이 좋다.
package com.util;
import java.sql.Connection;
import java.sql.DriverManager;
public class DBConn {
private static Connection dbConn;
// 자동으로 null 최기화
// try~catch 대신 메소드 뒤에 throws SQLException(getConnection처리)와 forName처리 구문을
// 사용하면 try~catch구문을 사용하지 않아도 된다. 하지만, 교육; 진행간에는 특별한 경우가 아니라면
// throws Exception사용하지 안고 try~catch문을 사용하도록 한다.
// thows Exception을 사용할 경우 예외가 발생하게 되면
// 프로그램 자체가 종료되어 버린다.
// 하지만 ,try~catch문을 사용할 경우 프로그램이 종료되는 것은 아니며 연결실패에 대한 원인 분석을
// 할수 있다.
// 또한, 이 오류를 클라이언트에게 보여줄 수도 있게 된다.
public static Connection getConnection() {
// 한번 연결된 객체를 계속 사용
// 연결되지 않은 경우에만 연결을 시도 -->싱글톤(디자인 패턴)
if (dbConn == null) {
try {
String url = "jdbc:oracle:thin:@내아이피주소~:1521:orcl";
// ip주소는 오라클 서버 주소, 1521은 오라클 port number.
// ocp03은 sid(Oracle Express Edition을 사용할 경우 xe라고 입력)
String user = "scott"; // 오라클 사용자 계정이름
String pwd = "tiger"; // 오라클 사용자 계정 암호
Class.forName("oracle.jdbc.driver.OracleDriver");
// OracleDriver 클래스에 대한 객체 생성
dbConn = DriverManager.getConnection(url, user, pwd);
// 오라클 서버 실제 연결
// 갖고 있는 인자값은 오라클 주소, 계정명 ,패스워드
}
catch (Exception e) {
// Exception 대신 SQLException 사용가능
// 단 , SQLException 을 사용할 경우 forName도 반드시
// 예외 처리(ClassNotFoundException)
// Exception getConnection, forName 두개
// 동시 처리
System.out.println(e.toString());
// 오라클 서버 연결 실패 시 오류 메세지 출력 부
}
}
return dbConn;
}
// getConnection()메소드의 오버로딩
public static Connection getConnection(String url, String user, String pwd) {
// dbConn 변수 (멤버변수)는
// Database 가 연결된 상태일 경우 Connection 객체를 갖는다.
// 연결되지 않은 상태라면 null을 갖는다.
if (dbConn == null) {
try {
Class.forName("oracle.jdc,driver.OracleDriver");
dbConn = DriverManager.getConnection(url, user, pwd);
}
catch (Exception e) {
System.out.println(e.toString());
}
}
return dbConn;
}
// 연결 종료 메서드
public static void close() {
if (dbConn != null) {
try {
// isClosed()메소드를 통해 연결 상태 확인
if (!dbConn.isClosed())
// close()메소드를 통해 연결 종료
dbConn.close();
} catch (Exception e) {
System.out.println(e.toString());
}
}
dbConn = null;
}
}
------------------------ Exception 처리시 ----------------------------
/*
DBConn2.java
--예외 처리 방법 수정
*/
// 기존 DBConn.java 의 내용 중
// try~catch 구문으로 작성된 내용을
// throws 구문으로 변경하여 작성한다.
package com.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConn2 {
private static Connection dbConn2;
public static Connection getConnection() throws SQLException,ClassNotFoundException {
if (dbConn2 == null) {
String url = "jdbc:oracle:thin:@127.0.0.1:1521:ocp03";
String user = "scott";
String pwd = "tiger";
Class.forName("oracle.jdbc.driver.OracleDriver");
dbConn2 = DriverManager.getConnection(url, user, pwd);
}
return dbConn2;
}
public static Connection getConnection(String url, String user, String pwd) throws ClassNotFoundException, SQLException {
if (dbConn2 == null) {
Class.forName("oracle.jdbc,driver.OracleDriver");
dbConn2 = DriverManager.getConnection(url, user, pwd);
}
return dbConn2;
}
public static void close() throws SQLException {
if (dbConn2 != null) {
if (!dbConn2.isClosed())
// close()메소드를 통해 연결 종료
dbConn2.close();
}
dbConn2 = null;
}
}
----------------------- Test 예제(연결 상태) --------------------------
/*
Text02.java
--sql 구문전송 테스트 2
*JDBC프로그램의 작성
*1. 드라이버 인스턴스 생성
* : 데이터베이스와 연결하여 사용할 파일들이 이쓴지 확인한다.
* 여기서는 굳이 인스턴스를 생성하지 않고,
* 드라이버가 있는지만 확인하더라도
* 프로그램을 실행하는 데는 지장이 없다.
* ==> 드라이버 클래스 찾는 방법
* : Class 라는 클래스의 forName()메소드를 사용
* 이 메소드는 매개변수로 받은 이름의 클래스를 찾아주는
* 역할을 하며, 해당 클래스를 찾지 못할 경우
* ClassNotFoundException 예외를 발생시킨다.
*
*2. 연결 객체 생성
* : 찾은 드라이버 클래스를 가지고
* 설치된 데이터베이스와 연결하는
* Connection 객체를 생성한다.
*
* ==> Connection 객체는 DriverManger클래스의
* getConnection()이라는 static 메소드로 생성한다.
* 예외는 데이터 베이스 서버와 연결할 때 발생하며,
* SQLException 예외를 발성시킨다.
*
* 3. 작업 객체 생성
* : 연결된 포트를 통해 질의문을 보낼 수 있도록
* 도와주는 객체를 생성한다.
* 자바에서는 크게 세가지 방법으로 질의를 처리한다.
* 1)Statement 객체 생성
* 정적 질의를 처리할 때 주로 사용
* 2)PreparedStatement 객체생성
* 동적 질의를 처리할 때 주로 사용
* 3)CallableStatement 객체생성
* 프로시저나 함수를 호출할 수 있게 해 주는 객체
*/
// 실행 예)
// 번호를 입력하세요(-1 종료) : 2
// 이름을 입력하세요 : 이순신
// 전화번호를 입력하세요 : 010-111 -1111
// 회원정보가 입력되었습니다.
// 번호를 입력하세요.(-1) : -1
// 프로그램 종료
package com.test;
import java.sql.Connection;
import java.sql.Statement;
import java.util.Scanner;
import com.util.DBConn;
public class Test02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 스캐너는 기본적으로 공백과 일치하는 구분 기호 패턴을 사용하여
// 토큰 입력 분할
Connection conn = DBConn.getConnection();
// do~ while 문을 사용하여 반복문 처리
do {
System.out.println("번호를 입력하세요.(-1 종료) :");
String sid = sc.next();
// 반복문을 깨뜨리는 조건문 구성
if (sid.equals("-1"))
break;
System.out.println("이름을 입력하세요 :");
String name = sc.next();
System.out.println("전화번호를 입력하세요 :");
String tel = sc.next();
if (conn != null) {
System.out.println("데이터베이스 연결 성공");
try {
// 작업 객체 생성
Statement stmt = conn.createStatement();
String sql = String.format("insert into tbl_member,sid,name,tel) values(%s,'%s','%s')", sid,name, tel);
// 데이터베이스로부터 질의 결과를 가져와야 하는 경우
// executeQuery() 메소드를 사용
// 특정 내용을 데이터베이스에 적용하는 경우
// executeUpdate() 메소드를 사용
int result = stmt.executeUpdate(sql);
if (result > 0)
System.out.println("회원 정보가 입력되었습니다.");
} catch (Exception e) {
System.out.println(e.toString());
}
}
} while (true);
DBConn.close();
System.out.println("데이터베이스 연결 닫힘 !!!");
System.out.println("프로그램 종료");
}
}
------------------------------- 연결 이상시 --------------------------------------
java.sql.SQLException: IO 예외 상황:
The Network Adapter could not establish the connection
해당 해당 오류시 몇가지 사항 체크
1. lsnrctl stat (cmd 창에서 리스너 체크)
2. port 번호와 sid 체크
3. 마지막으로 IP 주소 확인하기!
공유기를 쓰시는 분들은 대부분 내부 IP 로 보여지기 때문에 외부아이피 주소를 찾아서 쓰시던지..
아니면 자기 자신의 IP 주소 (127.0.0.1) 로 기재한다.
내 아이피 주소 확인 http://checkmyip.com 직접 접속!
아~~ 이거 외에도 기본적으로 추가해주어야 할 사항은
이클립스에서 오라클 연동 후 공부하려면 ojdbc14.jar 파일을 넣어줘야 한다!
자바를 C:드라이브에 설치를 하였으면
C:\Program Files\Java\jre7\lib\ext 이곳에 ojdbc14.jar 파일을 넣을수 있도록 한다.(첨부파일)
이상~~ 입니다. 머 또 다른건 없겠지...ㅋㅋ 더이상 기억이 안난다..ㅋㅋ
열공합시다!!!
오라클 설치하고 내 노트북..떵컴 된게 제일 슬프다...(ㅠ_ㅠ)
내년에 노트북 쿼드코어로 사야 할 것 같다. 듀얼코드의 한계에 압박...;;
'::::특별한 Java Story' 카테고리의 다른 글
JSP_세팅 (0) | 2013.06.20 |
---|---|
배열(Array) (0) | 2013.06.20 |
참조변수와 인스턴스의 연결 (0) | 2013.06.11 |
우편번호 DB (0) | 2013.06.10 |
instanceof 연산자 (0) | 2013.06.10 |