본문 바로가기
Back_end/JSP

JSP - JDBC

by hyeon1016 2024. 10. 31.

JDBC

JDBC(Java DataBase Connectivity)는 JAVA/JSP와 데이터베이스를 연결하는 인터페이스로 이를 사용하면 SQL을 통해 데이터베이스와 CRUD 등의 상호 작용을 할 수 있다.

 

작성 순서

  1. java.sql.* 패키지 임포트
  2. JDBC 드라이버 로딩
  3. DB 연결을 위한 Connection 객체 생성
  4. SQL을 실행하기 위한 Statement / PreparedStatement 객체 생성
  5. 쿼리 실행
  6. 쿼리 실행의 결과 값 사용(ResultSet 객체 사용)
  7. 사용한 객체를 역순으로 종료

 

DB 연결

드라이버 로딩 

JDBC 드라이버를 로딩하여 DB와 연결하기 위한 작업이다.

Class.forName("com.mysql.jdbc.Driver");

 

 

Connection 객체 생성

DB와 연결할 때 사용하는 객체로 DB의 주소, 아이디, 비밀번호를 가지고 있다.

DB가 생성되어 있는지, WEB-INF 폴더의 라이브러리에 jdbc.jar 파일이 있는지 확인해야 한다.

*드라이버 로딩 코드와 더불어 중복 사용이 많으므로 묶어서 함수 처리 하면 편하게 사용할 수 있다.

String database = "jdbc:mysql://localhost:3306/DB명"; 
String id = "root"; 
String pwd = "1234";
Connection conn = DriverManager.getConnection(database, id, pwd);

 

 

SQL전송

Statement / PreparedStatement

연결된 DB에 데이터를 전송하고, 결과를 가져오는 객체

SQL을 작성하고 워크 벤치에서 제대로 작동하는지 확인하는 게 좋다.

Statement객체

- 하나의 쿼리를 끝내면 바로 닫아줘야 한다. 

- 전송할 SQL을 작성할 때 정확한 값을 기입해야 한다. 값은 변수 처리가 가능하며, '+'로 구분하여 작성한다.

ex) String sql1 = "INSERT INTO table VALUES(10, 'A')";

      String sql2 = "INSERT INTO table2 VALUES(' "+a+" ') ";  ==> a는 변수다.

Statement stmt = createStatement()

 

PreparedStatement

- 하나의 객체로 여러 쿼리를 실행할 수 있으며, 사용을 끝냈을 때 닫아주면 된다.

- 동일한 SQL을 특정 값만 바꿔 실행할 때 사용한다.

- SQL의 값을 '?'로 표시하여 사용하며, setXxx(index, value) 메서드로 설정 가능하다.

ex) String sql =  "INSERT INTO table VALUES(?);"

      pstmt.setString(1, 변수);

PreparedStatement pstmt = conn.prepareStatement(sql);

 

 

메서드

메서드 반환타입 설명
executeQuery() ResultSet SELECT(Read) 쿼리 실행에 사용하며 결과 값을 ResultSet객체로 반환한다.
executeUpdate() void INSERT(Create), UPDATE, DELETE 쿼리 실행에 사용한다.
close() void 객체를 닫을 때 사용한다.
setXxx(index, value) Xxx PreparedStatement 객체에만 사용 가능하며, 할당할 값의 데이터 타입에 따라 작성하면된다.
*파라미터로 전달되는 index는 1부터 가능하다.

 

 

ResultSet

Statement/PreparedStatement 객체에 SELECT문으로 가져온 DB의 데이터를 저장하는 객체

*executeUpdate() 메서드를 사용했을 때는 사용하지 않는다.(CRUD의 Read에만 사용)

ResultSet rs = pstmt.executeQuery();
while(rs.next()){
        String id = rs.getString("id");
        String pwd = rs.getString("pwd");
        int age =  rs.getInt("age");
            
        member_dto dto = new member_dto();
        dto.setId(id);
        dto.setPwd(pwd);
        dto.setAge(age);
            
        arr.add(dto);
}

 

모든 DTO를 가져올 때는 while문 특정 DTO를 가져올 때는 if문을 사용한다.

 

메서드

메서드 반환타입 설명
getXxx(int ColumnIndex) XXX 파라미터로 전달하는 값은 1부터 시작해야하며 해당 위치에 있는 컬럼의 데이터 값을 반환한다.
getXxx(String Column) XXX 파라미터로 전달하는 값은 존재하는 컬럼의 이름이어야하며 컬럼의 데이터 값을 반환한다.
next() boolean 다음 행에 데이터가 있다면 true를 반환하고 다음 행으로 커서를 이동한다.
absolute(int row) boolean 설정한 row행으로 커서를 이동한다. 성공시 true 실패시 false, 파라미터는 변수처리하여 증감식과 함께 사용 가능하다. ex) i++
beforeFirst() void 첫 번째 행의 이전으로 커서를 이동한다.
afterLast() void 마지막 행의 다음으로 커서를 이동한다.
first() boolean 첫 번째 행으로 커서를 이동한다. 성공시 true 실패시 false
last() boolean 마지막 행으로 커서를 이동한다. 성공시 true 실패시 false
previous() boolean 현재 행의 이전 행으로 커서를 이동한다.
close() void 객체를 닫을 때 사용한다.

'Back_end > JSP' 카테고리의 다른 글

JSP - JSTL  (1) 2024.11.04
JSP - CRUD  (1) 2024.11.04
JSP - 데이터베이스  (0) 2024.10.30
JSP - 쿠키  (0) 2024.10.30
JSP - 세션  (0) 2024.10.30