Java
와 DB
를 연결하는 코드를 보며 해당 코드들이 어떠한 역할을 하는지 분석
주어진 조건
userinfo
key에 insert
하려하는 MemberDto
형 value가 저장되어 있음
dbUtil
파일 내 getConnection()
는 jdbc.jar
파일 build path
하는 메서드
SQL 구성
guestbook
테이블에 userid
, subject
, content
, regtime
총 네개의 Column
을 가지고 있음
- 각각의
Column
은 String
타입을 가짐
Servlet 코드
HttpSession session = request.getSession();
MemberDto memberDto = (MemberDto) session.getAttribute("userinfo");
if(memberDto != null) {
String userid = memberDto.getUserId();
String subject = memberDto.getUserSubject();
String content = memberDto.getUserContent();
Connection conn = null;
PreparedStatement pstmt = null;
int cnt = 0;
try {
conn = dbUtil.getConnection();
String sql = "";
sql += "insert into guestbook (userid, subject, content, regtime) \n";
sql += "values (?, ?, ?, now())";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userid);
pstmt.setString(2, subject);
pstmt.setString(3, content);
cnt = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
dbUtil.close(pstmt, conn);
}
return (cnt != 0 ? "/success.jsp" : "/fail.jsp");
} else
return ("/index.jsp");
해석
HttpSession session = request.getSession();
MemberDto memberDto = (MemberDto) session.getAttribute("userinfo");
Servlet
은 request
로부터 HttpSession
객체를 제공받음
getSession()
은 현재 HttpSession
이 존재하면 HttpSession
을 반환하고 존재하지 않으면 새로 세션을 생성
- 현재
session
에 userinfo
이름을 가진 key
값에 저장된 value
를 형변환하여 memberDto
변수에 저장
String userid = memberDto.getUserId();
String subject = memberDto.getUserSubject();
String content = memberDto.getUserContent();
memberDto
객체에 저장된 userid
, subject
, content
를 각 변수에 저장
Connection conn = null;
PreparedStatement pstmt = null;
- 데이터베이스와 연결하는 인터페이스
Connection
선언
Statement
를 상속받는 인터페이스로, SQL구문을 실행
시키는 기능을 가진 객체인 PreparedStatement
선언
conn = dbUtil.getConnection();
String sql = "";
sql += "insert into guestbook (userid, subject, content, regtime) \n";
sql += "values (?, ?, ?, now())";
pstmt = conn.prepareStatement(sql);
conn
변수에 Connection 객체 연결
String
타입 변수에 실행하고자 하는 sql
삽입
sql
에 들어갈 매개변수는 ?
로 표기
pstmt
에 sql
문을 삽입함으로, sql
문이 pstmt
라는 객체로 만들어짐
pstmt.setString(1, userid);
pstmt.setString(2, subject);
pstmt.setString(3, content);
cnt = pstmt.executeUpdate();
pstmt
에 삽입한 sql
의 몇번째 물음표에 어떤값을 집어넣는지 명시
- 인덱스가 1부터 시작함
select
는 executeQuery
를 사용
insert
, update
, delete
는 executeUpdate
를 사용
dbUtil.close(pstmt, conn);
pstmt
, conn
이 열려있다면 닫기
- 연결을 닫을때는 가장 최근에 만들어진 것부터 닫아야 함
select 일때
- 결과집합객체를 받기 위한
ResultSet
가 추가
executeUpdate()
가 아닌 executeQuery()
를 통해 ResultSet
타입으로 선언한 변수에 삽입
- 조회된 행열 데이터를 얻기위해
(변수).next()
를 통해 하나씩 행을 얻을수 있음