🚀 부트캠프 - 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 되는 것일까...