[ITWILL : JSP]JDBC활용 - DB에서 고객정보를 불러와서 HTML테이블에 담기

ITWILL학원 : 20강 JSP기초 BY 정규태강사

JDBC

  1. JDBC활용 - import쓰는 이유, form페이지로 받은 데이터를 DB에 insert하는 방법
  2. JDBC활용 - JAVA에서 DB 정보 지우기 2가지방법
  3. JDBC활용 - DB에서 고객정보를 불러와서 HTML테이블에 담기
  4. JDBC활용 - TIMESTAMP주의점, JDBC에서 데이터처리
  5. JDBC활용 - 회원정보수정페이지만들기
  6. JDBC활용 - 회원목록출력하는데 관리자는 빼고 출력하기, 자바 에러 두종류

DB저장되어있는 모든 회원정보를 출력하는 코드를 작성해보자.

1. recordset과 resultset

  • recordset = select 구문의 결과. BOF부터 EOF(End Of File)까지의 총 덩어리를 의미.

https://www.xylos.com/en/learning/blog/tip-5-save-time-processing-data-excel-vba-recordset

  • resultset = 테이블을 의미. ex)테이블A, 테이블B, 테이블C 각각이 다 resultset이다.

  • rs.next() = 커서객체를 다음(next)로 넘기는 메서드. row에 데이터가 있으며 true이고 없으면 다음 row로 내려간다. 데이터에 행이 없으면 False가 되고 while문이 종료된다.

  • getString(columnIndex)는 columnIndex안에 테이블의 열번호를 넣으면 된다.

    • 가독성이 떨어지고 모든 열이 어떤 데이터인지 알고있을때 사용할 수있다.
    • 따라서 index값을 사용하는 경우 주석을 적어 무엇을 나타내는 데이터인지 알려주는 것이 좋다.

2. DB에서 고객정보를 불러와서 테이블에 담기.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<table border="1">
<tr>
<td>인덱스</td>
<td>이름</td>
<td>성별</td>
<td>나이</td>
<td>주민번호</td>
</tr>
<%//1.변수설정
%>
<% //2. 드라이버 로드와 DB연결
final String DRIVER = "com.mysql.jdbc.Driver";
final String DBURL = "jdbc:mysql://localhost:3306/jspdb";
final String DBID = "root";
final String DBPW = "1234";

Class.forName(DRIVER);
Connection con = DriverManager.getConnection(DBURL, DBID, DBPW);

//3.쿼리작성
String sql = "select * from itwill_member";
PreparedStatement pstmt = con.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();

//3-1.일반출력
/* while(rs.next()){
System.out.println("이름 : " + rs.getString("name") //이름만 출력
+ ", 성별 : " + rs.getString("gender")
+ ", 나이 : " + rs.getInt("age")
+ ", 주민번호 : " + rs.getString("jumin"));
//이름, 나이, 성별, 주민번호 -> 콘솔로 출력하기 -> html 테이블생성해서 출력하기
}*/

2-1. 테이블에 출력

가져온 데이터를 테이블형태로 출력해보는데 2가지 방법이 있다.

  1. 변수지정없이 바로 while반복문실행
    SQL구문작성시 select * from itwill_member이라서 while반복문을 사용했다.
    만약 SQL구문이 select * from itwill_member where id=?로 where조건절을 추가하면 반복문이 아닌 if문으로 사용가능하다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//3.쿼리작성
String sql = "select * from itwill_member";
PreparedStatement pstmt = con.prepareStatement(sql);

ResultSet rs = pstmt.executeQuery();

while(rs.next()){
%>
<tr>
<td><%=rs.getString(1) %></td> //인덱스
<td><%=rs.getString("name") %></td>
<td><%=rs.getString("gender") %></td>
<td><%=rs.getInt("age") %></td>
<td><%=rs.getString("jumin") %></td>
</tr>
<%
}
%>

</table>
  1. 변수에 저장해서 반복문없이 table에 바로 태그집어넣기
    rs에서 가져온 값을 변수로 저장해서 html table태그에 바로 표현식으로 집어넣을 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//3.쿼리작성
String sql = "select * from itwill_member where id=?";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);

ResultSet rs = pstmt.executeQuery();

String name = "";
int age = 0;
String gender = "";
String email = "";
Timestamp reg_date = null; //null이 초기값임

if(rs.next()){
//id=rs.getString("id"); 세션으로 가져와서 필요없음
name = rs.getString("name");
age = rs.getInt("age");
gender = rs.getString("gender");
email = rs.getString("email");
reg_date = rs.getTimestamp("reg_date");
}
%>
<table border=1>
<tr>
<td>아이디</td>
<td>이름</td>
<td>나이</td>
<td>성별</td>
<td>이메일</td>
<td>가입일자</td>
</tr>
<tr>
<td><%=id %></td>
<td><%=name %></td>
<td><%=age %></td>
<td><%=gender %></td>
<td><%=email %></td>
<td><%=reg_date %></td>
</tr>
</table>