🚀 부트캠프 - PLAYDATA/📒 수업 내용 정리

[PLAYDATA / JavaWeb] Oracle, elclipse DB 연결방법

minhe2810 2023. 7. 29. 19:33

1. 기본적인 java db연결방법 

package com.kmh;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

import java.util.List;


public class MemberDAO {

	private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
	private static final String URL = "jdbc:oracle:thin:@localhost:1521:XE";
	private static final String USER = "scott";
	private static final String PWD = "tiger";

	public Connection con;
	private Statement stmt;

	private void conDB() {
		try {
			Class.forName(DRIVER);
			System.out.println("Oracle 드라이버 로딩 성공");
			con = DriverManager.getConnection(URL, USER, PWD);
			System.out.println("Connection 생성 성공");
			stmt = con.createStatement();
			System.out.println("Statement 생성 성공");
		} catch (Exception e) {
			System.out.println("conDB() ERR: " + e.getMessage);
		}
	}	
} // MemberDAO END

PreparedStatement pstmt;
Statement stmt; 
둘 다 사용할 수 있다. 
 
하지만 Statement  보다 PreparedStatement가 더 효율적임

Why?
preparedStatement : prepaedStatement는 쿼리를 미리 갖고 있음. 사전에 컴파일된 걸 갖고 있다가 전송해주는 것이기 때문에 속도가 더 빠름 따라서, '?' 없을때 사용해도 된다.

pstmt.set 안해도 됨

따라서, Statement 에서  PreparedStatement 로 바꿔줌

 
2. PreparedStatement  사용

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class MemberDAO2 {
	private static final String driver = "oracle.jdbc.driver.OracleDriver";
	private static final String url = "jdbc:oracle:thin:@localhost:1521:XE";
	private static final String user = "scott";
	private static final String pwd = "tiger";
	
	private Connection con;
	private PreparedStatement pstmt;
	
	private void connDB() {
		try {
			Class.forName(driver);
			System.out.println("Oracle 드라이버 로딩 성공");
			con = DriverManager.getConnection(url, user, pwd);
			System.out.println("Connection 생성 성공");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

3. JNDI 사용

package com.kmh;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;



// JNDI 방법을 활용한 데이터베이스 연결방법 
public class MemberDAO2 {
	
	// DAO내부에서만 사용되기 때문에 밖에서 선언함 
	public Connection con;
	private PreparedStatement pstmt;
	private DataSource dataFactory;
	

	public MemberDAO2() {
		System.out.println("MemberDAO 생성자 호출");
		
		try {
			// Context.xml 
			Context ctx = new InitialContext(); 
			// Context / JNDI 를 찾기 위한 경로 
			Context envContext = (Context) ctx.lookup("java:/comp/env");
			// <Context><Resource name ="">을 찾기 위한 코드 
			dataFactory = (DataSource) envContext.lookup("jdbc/oracle");
			// Context.lookup() => 반환타입이 Object 따라서 필요한 형태로 형변환
		} catch (Exception e) {
			System.out.println("MemberDAO 생성자 호출 ERR : " + e.getMessage());
		}
	} // MemberDAO2() 생성자 END
	
	
	/*
	 * private void connDB() { try { Class.forName(driver);
	 * System.out.println("Oracle 드라이버 로딩 성공"); 
	 * con = DriverManager.getConnection(url, user, pwd);
	 * System.out.println("Connection 생성 성공"); } catch (Exception e) {
	 * e.printStackTrace(); } }
	 */
	
	

	public List<MemberVO> listMembers(){
		List<MemberVO> list = new ArrayList<>();
		try {
			con = dataFactory.getConnection();
			String query = "SELECT * FROM t_member";
			System.out.println(query);
			
			pstmt = con.prepareStatement(query);
			ResultSet rs = pstmt.executeQuery();
			
			// 생략
            
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
		
		
} // MemberDAO2 END

왜 계속 이상한 list가 import 되는 것일까...