프로그래밍/HTML,CSS

JSP와 Servlet에서 DB 접근 프로그래밍

나모장 2021. 12. 2. 01:53

1. JDBC 드라이버 로드

Class.forName("oracle.jdbc.driver.OracleDriver");
Class.forName("com.mysql.jdbc.driver");
Class.forName("com.mariadb.jdbc.driver");

2. Connection 객체 생성 및 db 연결

java.sql.Connection 객체 이용

String jdbc_url = "jdbc:dbms이름://IP주소:port/db명" // 내컴퓨터에 있을경우 localhost 사용 
Connection conn = DriverManager.getConnection(JDBC_url, "아이디", "비밀번호");

3. Statement 객체 생성

1) java.sql.Statement 객체

- SQL 구문을 입력받아 질의를 수행하고 결과값을 가져옴.

- Connection  객체의 createStatement() 메소드 사용

- Statement 객체를 이용하여 직접 SQL 문 실행 가능

Statement stmt = conn.createStatement();
stmt.executeUpdate("insert into member values('"
+ request.getParameter("id") + "','" + request.getParameter("pw")+"')'");

2) java.sql.PreparedStatement 객체

- SQL 구문 미리 컴파일 하여 Statement 객체보다 효율적으로 SQL처리 가능

- 입력 파라미터 위치 지정하기 위해 SQL 구문에 물음표 사용

PreparedStatement pstmt = conn.prepareStatement("insert into member values(?,?)");
pstmt.setString(1, request.getParamter("id");
pstmt.setString(2, request.getParamter("pw");

4. SQL 질의를 수행(전송)

java.sql.Statement or java.sql.PreparedStatement 객체 

메소드 리턴 타입 설명
executeQuery(String sql) java.sql.ResultSet SELECT 문으로 데이터 추출 위한 SQL 실행
데이터를 간직하고 있는 ResultSet 리턴
executeUpdate(String sql) int INSERT, UPDATE, DELETE 실행(데이터 추출 없음)
반영된 레코드 개수를 int형으로 리턴
PreparedStatement pstmt = conn.prepareStatement("insert into member values(?,?)");
pstmt.setString(1, request.getParameter("id");
pstmt.setString(2, request.getParameter("pw");

pstmt.executeUpdate();

5. 결과받기

- 데이터 추출된 데이터는 ResultSet 객체로 가져옴

java.sql.ResultSet 객체 : next() 반환값은 Boolean 형

String query = "SELECT * FROM MEMBER"; // select문으로 ResultSet 객체에 데이터를 가져온 후 데이터 추출
Statement stmt = conn.createStatement(); 
ResultSet rs = stmt.executeQuery(query); // ResultSet 객체의 메서드 통해 데이터 추출

while(rs.next()) {
	author = rs.getString(1);
    id = rs.getInt(2);
}

rs.close();

- 만약 sql문이 데이터 추출이 아닌 경우 ResultSet 생략

 

6. 연결해제 (생성된 객체 닫기)

- Connection을 close()하지 않으면 사용하지 않는 연결이 유지됨.

- 연결해제 함으로써 낭비할 수 있는 DB 자원 방지

rs.close() // ReseultSet object
stmt.close() // Statement object
conn.close() // Connection object