3. 레코드 리스트 출력 부분 작성 -2

미려김·2024년 3월 5일

JSP 프로그래밍

목록 보기
7/14

3.2.2 레코드 리스트 출력 문서 작성

클래스 파일 지정

  • 타임스탬프로 입력된 시간 데이터 -> 문자열 형식의 날짜로 변환 => SimpleDateFormat 클래스 import
  • JDBC 사용 -> java.sql 패키지 클래스 import
  • BoardList.jsp 문서 상단에 아래 구문 추가
  <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  <%@ page import="java.text.SimpleDateFormat" %>
  <%@ page import="java.sql.*" %>

변수 및 객체의 선언

  • JDBC 이용해 DB와 연결하기 위한 Connection객체
  • 질의를 수행하고 그 결과를 추출하기 위한 PreparedStatement 객체, ResultSet 객체
  • BoardList.jsp 문서에서 실행되는 질의 2개
    • rs1 : 테이블 내에 존재하는 전체 레코드의 수를 추출하는 질의
    • rs2 : BoardList.jsp 문서에 출력할 제목, 작성자, 작성일, 참조수를 추출하기 위한 질의
  • 추출된 전체 레코드의 수를 가지는 변수 : TotalRecords
  • 추가되는 구문
 	<%
	Connection conn = null;
	PreparedStatement pstmt = null;
	ResultSet rs1 = null;
	ResultSet rs2 = null;
	
	int TotalRecords = 0;

JDBC 설정

  • BoardWriteProc.jsp 문서와 동일
  • Class.forName()메소드 사용 -> MSSQL 드라이버 로드 -> id&pass 사용 -> DB에 접근할 수 있는 Connection 객체 conn 사용
  • 아래 구문 추가
 	try{
	String jdbcUrl = "jdbc:sqlserver://localhost:port;encrypt=false;DatabaseName=shc;";
	String jdbcId = "id";
	String jdbcPw = "pw";
	
	Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
	conn = DriverManager.getConnection(jdbcUrl, jdbcId, jdbcPw);

질의의 생성과 객체의 생성

  • <전체 레코드의 수> 추출하는 질의
    • 전체 레코드의 수 : 차후 페이지 내비게이션을 작성할 때 필수적인 값
  • 추가되는 구문
	String Query1 = "SELECT count(RcdNO) FROM board";
	String Query2 = "SELECT RcdNo, UsrSubmit, Urname, UsrDate, Usrrefer FROM board ORDER BY RcdNo DESC";
	
	pstmt = conn.prepareStatement(Query1);
	rs1 = pstmt.executeQuery();
	pstmt = conn.prepareStatement(Query2);
	rs2 = pstmt.executeQuery();
  • <전체 레코드의 수> 추출
    • next() 메소드 사용 -> ResultSet 객체 rs1의 포인터 첫 번째 레코드로 이동 -> 전체 레코드의 수를 가진 필드 값 추출 -> TotalRecords 값에 대입
    • 추가되는 구문
          rs1.next()
          TotalRecords = rs1.getInt(1);

순환문을 이용한 레코드의 출력

  • 2개의 부분 필요

    • 레코드 단위로 필드 값을 추출하고 가공하는 부분
    • 추출된 필드 값을 브라우저에 출력하는 부분
  • 왜 자꾸 에러나 나지 - 교재 그대로 타이핑 했는데 안됨ㅠ

  <%
          //----------------------------- 순환문을 이용한 레코드 출력 시작
          while(rs2.next()){
              //---------------------------------- 필드 데이터 추출과 출력
              int rno = rs2.getInt("RcdNo");
              String subject = rs2.getString("UsrSubject");
              String name = rs2.getString("UsrName");
			
			long date = rs2.getLong("UsrDate");
			SimpleDateFormat Current = new SimpleDateFormat("yyyy/MM/dd");
			String today = Current.format(date);
			
			int refer = rs2.getInt("UsrRefer");
			%>		

		<TR>
			<TD WIDTH=45 ALIGN=CENTER><%=TotalRecords%></TD>
			<TD WIDTH=395 ALIGN=LEFT><A HREF="BoardContent.jsp"><%=subject%></A></TD>
			<TD WIDTH=65 ALIGN=CENTER><%=name%></TD>
			<TD ALIGN=CENTER><%=today%></TD>
			<TD ALIGN=CENTER><%=refer%></TD>
		</TR>
		
		<% // 근데 여기서 자꾸 에러남
			//------------------------- 순환문을 이용한 레코드 출력 종료
			TotalRecords--; 
		
		%>
  • 에러내용

    Multiple annotations found at this line:
    - Syntax error, insert "Finally" to complete TryStatement
    - Syntax error, insert "}" to complete ClassBody
    - Syntax error, insert "}" to complete Block


  • 코드 실행하면 이딴 화면만 뜸...울고싶음

  • 왠지 알 것 같음!!! JDBC 연결하면서 try{ 열고 } 안닫음!~!

  • 그래도 왜 안되지…⇒ 연휴 지나고 출근해서 다시 해보니 에러는 안남 근데 흰 화면만 나옴

  • 이유 : SQL 쿼리에서 컬럼명 잘못 작성해서 흰 바탕만 뜨는거였음....

    • 창은 나오는데 아무것도 안 뜬다 → SQL Server에서 쿼리문 직접 쳐보기 ⇒ 이렇게 컬럼명 잘못 작성한걸 알게됨
    • 수정 후 잘 나옴

사담
게시판 글 쓸 때 대충 갑타 영중이랑 준수 대사로 적었는데
이 화면 그대로 차장님이랑 주임님이 보심....아니 보시기전에 내용 바꾸려고 했는데ㅠ
insert까지 성공했다고 말씀드리니 그럼 한 번 보죠! 이러셔서 굉장히 난감하고 당황스러웠음...
정말 망신살이 제대로 꼈는데 스불재라는게 걍 웃김...ㅋ

profile
안녕하세요.

0개의 댓글