JDBC
JDBC(Java DataBase Connectivity)는 JAVA/JSP와 데이터베이스를 연결하는 인터페이스로 이를 사용하면 SQL을 통해 데이터베이스와 CRUD 등의 상호 작용을 할 수 있다.
작성 순서
- java.sql.* 패키지 임포트
- JDBC 드라이버 로딩
- DB 연결을 위한 Connection 객체 생성
- SQL을 실행하기 위한 Statement / PreparedStatement 객체 생성
- 쿼리 실행
- 쿼리 실행의 결과 값 사용(ResultSet 객체 사용)
- 사용한 객체를 역순으로 종료
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 |