코드로 보는 JAVA에서 DataBase 연결

김민창·2021년 10월 13일
0
post-thumbnail

JavaDB를 연결하는 코드를 보며 해당 코드들이 어떠한 역할을 하는지 분석

주어진 조건

  • userinfo key에 insert 하려하는 MemberDto형 value가 저장되어 있음
  • dbUtil 파일 내 getConnection()jdbc.jar 파일 build path하는 메서드

SQL 구성

  • guestbook 테이블에 userid, subject, content, regtime 총 네개의 Column을 가지고 있음
  • 각각의 ColumnString 타입을 가짐

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");
  • Servletrequest로부터 HttpSession 객체를 제공받음
  • getSession()은 현재 HttpSession이 존재하면 HttpSession을 반환하고 존재하지 않으면 새로 세션을 생성
  • 현재 sessionuserinfo 이름을 가진 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에 들어갈 매개변수는 ? 로 표기
  • pstmtsql 문을 삽입함으로, sql문이 pstmt 라는 객체로 만들어짐

pstmt.setString(1, userid);
pstmt.setString(2, subject);
pstmt.setString(3, content);
cnt = pstmt.executeUpdate();
  • pstmt 에 삽입한 sql 의 몇번째 물음표에 어떤값을 집어넣는지 명시
  • 인덱스가 1부터 시작함
  • selectexecuteQuery를 사용
  • insert, update, deleteexecuteUpdate를 사용

dbUtil.close(pstmt, conn);
  • pstmt, conn 이 열려있다면 닫기
  • 연결을 닫을때는 가장 최근에 만들어진 것부터 닫아야 함

select 일때

  • 결과집합객체를 받기 위한 ResultSet가 추가
  • executeUpdate() 가 아닌 executeQuery()를 통해 ResultSet 타입으로 선언한 변수에 삽입
  • 조회된 행열 데이터를 얻기위해 (변수).next()를 통해 하나씩 행을 얻을수 있음
profile
개발자 팡이

0개의 댓글