다연이네

[days02] 싱글톤 클래스 작성 본문

JDBC

[days02] 싱글톤 클래스 작성

 다연  2020. 11. 24. 22:29
반응형

DBConn

package com.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;



//싱글톤
public class DBConn {
	//디폴트생성자
	private DBConn() {}
	
	private static Connection connection = null;
	//private로 잡아서 바로 접근 못하도록
	//Connection : 자바 SW와 DB를 연결해주는 다리
	
	public static Connection getConnection() {
		if(connection == null) {//null이면 생성해서 돌리고 널 아니면 생성 안하고 돌리기

			String className ="oracle.jdbc.driver.OracleDriver"; //드라이버 클래스 이름
			//밖에서 OracleD까지 치고 위에 생기는 import 값 복붙해오기
			
			String url = "jdbc:oracle:thin:@localhost:1521:xe"; //type4 (thin)
			//항상 내 디비 연결할 순 없고 다른 서버의 다른 디비 연결해야 할 때가 있다 =>오버로딩
			String user = "scott";
			String password = "tiger";
			
			try {
				Class.forName(className);
				connection = 	DriverManager.getConnection(url, user, password);
			} catch (ClassNotFoundException e) {
				//드라이버 로딩 오류
				e.printStackTrace();
			} catch (SQLException e) {
				//컨넥션 오류 (디비 연결 오류)
				e.printStackTrace();
			}
		}
		
		return connection;
	}
	
	
	//오버로딩
	public static Connection getConnection(
			String url, String user, String password ) {
		if(connection == null) {//null이면 생성해서 돌리고 널 아니면 생성 안하고 돌리기

			String className ="oracle.jdbc.driver.OracleDriver"; //드라이버 클래스 이름
			//클래스 네임도 달라진다면 다른 dbms를 연동하겠다는 의미(오라클이 아닌 mysql 등)
			//그럴 경우 getConnection을 하나 더 복사 (오버로딩 해서 String className까지 매개변수로 주기)
			
			try {
				Class.forName(className);
				connection = 	DriverManager.getConnection(url, user, password);
			} catch (ClassNotFoundException e) {
				//드라이버 로딩 오류
				e.printStackTrace();
			} catch (SQLException e) {
				//컨넥션 오류 (디비 연결 오류)
				e.printStackTrace();
			}
		}
		
		return connection;
	}
	//
	
	
	
	public static void close() { //DB를 닫는 close 함수
		try {
			if(connection != null && !connection.isClosed()) {
				//커넥션 객체가 닫혔는지 안닫혔는지 묻고 닫혔다면 true 반환
				connection.close();
				//객체가 있고 안닫혔다면 닫겠다
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		connection = null;
		//중요 
	}
		
}

 

Re01

package review;

import java.sql.Connection;

import com.util.DBConn;

public class Re01 {
	public static void main(String[] args) {
		//DBConn con = new DBConn(); 매번 new연산자로 만드는것을 막기위해 DBConn에 private라고 씀

		Connection con = DBConn.getConnection();
		
		System.out.println(con);
		
		DBConn.close();

	}
}

출력값 : oracle.jdbc.driver.T4CConnection@4629104a

 

 

다른 오라클 서버 연결

package days02;

import java.sql.Connection;
import java.sql.SQLException;

import com.util.DBConn;

public class Ex01_02 {

	public static void main(String[] args) {		
		
	String ipAddress = "192.168.0.26";
	int port = 1521;
	String SID = "XE";
	
		String url = String.format(
				"jdbc:oracle:thin:@%s:%d:%s", ipAddress, port, SID); //type4 (thin)
		
		String user = "hr";
		String password = "lion";
		
		
		Connection con = DBConn.getConnection(url, user, password);
		System.out.println(con);
		//con.close();
		DBConn.close();

		System.out.println("=END=");
	}

}

반응형
Comments