jdbc(Java DataBase Connectivity)는 자바와 데이터베이스를 연결하는 API를 말합니다.
이를 이용하여 데이터베이스에 데이터를 넣거나 조회, 업데이트, 삭제를 할 수 있습니다.
-jdbc 준비
먼저 사용하고자 하는 sql프로그램 사이트에서 자바 컨넥터를 다운 받습니다.

선택한 프로젝트의 build path=> configure build path에 갑니다.

classpath에 add External JARs에 다운받은 확장자명 .jar파일을 업로드 합니다.
-jdbc 연결/실행

연결된 sql를 쓰기 위해서는
1. 드라이버를 로드하고
2. 드라이버를 연결하고
3. 실행도구를 만들고
4. 반환 결과를 받는다.
위 같은 순서로 진행 됩니다.
이때 반환된 데이터를 받는 ResultSet은 모든 데이터 목록을 보여주는 것이 아니라 하나 씩 보냅니다.

따라서 다음과 같이 iterator처럼 while문과 next()메소드를 이용하여 하나씩 불러옵니다.
실행이 끝났으면 나중에 객체를 생성한 순서대로 close()를 해줌으로써 해당 객체를 메모리에서 정리합니다.
-PreparedStatement
statement를 사용하면 매번 sql문을 사용할 때 마다 컴파일 과정을 거칩니다.
반면에 PreparedStatement는 sql문 컴파일=> 실행하는 과정을 한번만 실행하고 캐시에 담아 나중에 재사용 합니다.
따라서 성능 개선, 반복적인 작업에 효율적입니다.
또한 사용자의 입력에 따라 변하는 동적인 sql구문 사용할 때 편리합니다.

"where id = ?" 에서 ?를 변수로 두어 동적으로 sql문을 처리할 수 있다. 이때 여러개의 ?를 쓸 경우 1부터 시작합니다.
executeUpdate() 메소드는 수정된 행의 갯수를 반환합니다.
만약 위 구문을 실행하면 id = 2인 행 1개만 삭제되므로 result값은 1입니다.
-다음은 chatgpt한테 statement랑 preparedstate의 차이를 물어본 결과이다. 이해하는데 도움이 되어서 여기에서 정리해보았습니다.
예시로, 아래와 같은 SQL문이 있다고 가정해보겠습니다.
SELECT * FROM users WHERE name = 'John' AND age = 30
이 SQL문을 Statement와 PreparedStatement를 사용하여 실행하면 다음과 같습니다.
// Statement를 사용하는 경우
Statement stmt = conn.createStatement();
String sql = "SELECT * FROM users WHERE name = 'John' AND age = 30";
ResultSet rs = stmt.executeQuery(sql);
// PreparedStatement를 사용하는 경우
String sql = "SELECT * FROM users WHERE name = ? AND age = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "John");
pstmt.setInt(2, 30);
ResultSet rs = pstmt.executeQuery();
위의 예시에서 Statement를 사용하는 경우, SQL문을 문자열로 전달하므로 SQL 인젝션 공격 등의 보안 이슈가 발생할 가능성이 있습니다.
반면에 PreparedStatement를 사용하는 경우, SQL문을 미리 컴파일하고 바인딩하여 실행하므로 실행 시간이 빠릅니다. 또한, SQL 인젝션 공격 등의 보안 이슈를 방지할 수 있습니다.
(참고영상:https://www.youtube.com/@newlec1)
뉴렉처
"유료" 온라인 강의 사이트 뉴렉처에서 제공하는 프로그래밍 강의 채널입니다. 교육서비스 : (10월 새롭게 오픈될 예정입니다.) https://www.newlecture.com 교재: https://javaweb.tistory.com https://answeris.tistory.
www.youtube.com
'컴퓨터 > JAVA' 카테고리의 다른 글
| Servlet/JSP - jsp의 라이브러리(JSTL) (0) | 2023.03.31 |
|---|---|
| Servlet/JSP - 데이터베이스를 위한 객체(DTO, DAO, VO) (0) | 2023.03.30 |
| Servlet/JSP - JSP(Java Server Page) (0) | 2023.03.28 |
| Servlet/JSP - 서블릿 필터(filter) (0) | 2023.03.27 |
| Servlet/JSP - 상태 유지 방법 (0) | 2023.03.15 |