JDBC/JDBC 수업

#31. JDBC(Properties)

열하나요 2023. 8. 14. 14:11

Properties를 이용하여 '동적코딩방식'을 적용한다.

기존의 자바소스코드 내부에 명시적으로 작성하였던 정적코딩방식(하드코딩)과는 다르게

외부파일을 만들어서 관리할 수 있다. => 유지보수에 용이함!

 

Properties prop 개체를 만들면

prop.setProperties("키", "밸류");

prop.getProperties("키");

prop.store("키값", "별칭"); (키값으로 Stream을 넣어준다. new FileOutputStream("파일명") => 파일 기록)

prop.load("키값"); (키값으로 Stream을 넣어준다. new FileInputStream("파일명") => 파일 읽어오기)

을 이용할 수 있다.

 

그래서, 

1. JDBC Driver등록 구문, 내가 접속할 DB의 URL정보, 계정명, 비밀번호를 외부에 저장해두고 사용할 수 있다.

 

Static으로 위의 정보들을 빼놓고

 

1) [Run]에서 'Driver' 설정정보들을 FileOutput하여 파일로 빼놓고

public class Run {
	public static void main(String[] args) {
		Properties prop = new Properties();
		try {
			prop.store(new FileOutputStream("driver.properties"), "설정정보");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

2) [Template]에 static으로 FileInput하여 기존의 Connection 객체에 get으로 만들어 놓기

public class JDBCTemplate {
	public static Connection getConnection() {
		Connection conn = null;
		Properties prop = new Properties();
		
		try {
			prop.load(new FileInputStream("resources/driver.properties"));
			// 1) JDBC Driver 등록
			Class.forName(prop.getProperty("driver"));
			// 2) Connection 객체 생성
			conn = DriverManager.getConnection(prop.getProperty("url"), prop.getProperty("username"), prop.getProperty("password"));
			conn.setAutoCommit(false); // 오토커밋 꺼주기
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return conn;
	}

3) [Service]에서 Connection객체를 사용할 수 있다.

(JDBCTemplate.getConnection하면 새로운 Driver에 연결된 Connection 객체 사용 가능!)

public class MemberService {
	public int insertMember(Member m) {

		Connection conn = JDBCTemplate.getConnection();
        
		JDBCTemplate.close(conn);
		
		return result;
	}
}

 

2. SQL문도 외부에 저장해두고 사용할 수 있다. XML파일로 저장하여 불러 사용해보자.

prop.storeToXML(키값 + 밸류);

prop.loadFromXML(키값);

1) [Run]에서 'SQL문'을 FileOutput하여 파일로 빼놓고 

public class Run {
	public static void main(String[] args) {
		Properties prop = new Properties();
		try {
			prop.storeToXML(new FileOutputStream("member-mapper.xml"), "Member Mapper");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

2) [DAO]에서 생성자로 FileInput하여 new MemberDao(). 할때마다 Properties 객체를 읽어올 수 있다.

public class MemberDao {
	private Properties prop = new Properties();

	public MemberDao() {
		try {
			prop.loadFromXML(new FileInputStream("resources/member-mapper.xml"));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 

 

 

 

실습...

1. ProductManager

최종(Template + Properties버전으로 교체)

2. 짝궁끼리 한 프로젝트

최종(Template + Properties버전으로 교체)

3. Message + Board

최종(Template + Properties버전으로 교체)

 

 

 

 

 

 

 

김난도- 트렌드 코리아

'JDBC > JDBC 수업' 카테고리의 다른 글

#33. Test. TeamProject(TODOLIST)  (0) 2023.08.17
#30. JDBC(model에 service클래스 추가), Template  (0) 2023.08.11
#29. test... 팀플과제  (0) 2023.08.10
#28. PreparedStatement  (0) 2023.08.09
#27. JDBC, Connection, Statement, ResultSet  (0) 2023.08.08