우리는 앞서 MySQL의 기본 사항에 대해 배울 때 “명령 프롬프트”를 통해 “mysql” 클라이언트 프로그램을 실행함으로써 데이터베이스 서버에 접속하고 몇몇 데이터 조작을 위한 명령을 실행하였다. 이 과정은 크게 네 가지 단계로 나누어 생각할 수 있다.
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-KR”>
<title>Insert title here</title>
</head>
<body>
<form action=”MemberJoin.jsp” method=”post”>
<table>
<tr>
<td>회원아이디</td>
<td><input type=”text” size=”10″ maxlength=”16″ name=”userid“></td>
</tr>
<tr>
<td>비밀번호</td>
<td>
<input type=”password” size=”10″ maxlength=”16″ name=”userpwd1“>
<input type=”password” size=”10″ maxlength=”16″ name=”userpwd2“>
</td>
</tr>
<tr>
<td>이름</td>
<td><input type=”text” size=”10″ maxlength=”20″ name=”username“></td>
</tr>
<tr>
<td>주민등록번호</td>
<td>
<input type=”text” size=”6″ maxlength=”6″ name=”jumin1“> –
<input type=”password” size=”7″ maxlength=”7″ name=”jumin2“>
</td>
</tr>
<tr>
<td> </td>
<td>
<input type=”submit” value=”등록”>
<input type=”reset” value=”초기화”>
</td>
</tr>
</table>
</form>
</body>
</html>
pageEncoding=”EUC-KR”%>
<%@ page import = “java.sql.*” %>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<%
request.setCharacterEncoding(“euc-kr”);
String userId = request.getParameter(“userid”);
String userPwd1 = request.getParameter(“userpwd1”);
String userPwd2 = request.getParameter(“userpwd2”);
String userName = request.getParameter(“username”);
String jumin1 = request.getParameter(“jumin1”);
String jumin2 = request.getParameter(“jumin2”);
Class.forName(“com.mysql.jdbc.Driver“);
Connection conn = null;
Statement stmt = null;
String url = “jdbc:mysql://localhost:3306/jsp?user=jsp&password=your_password“;
String sql = “INSERT INTO members VALUES (‘”
+ userId +”‘, md5(‘”+ userPwd1 +”‘),'”+ userName +”‘,'”+ jumin1 +”‘,md5(‘”+ jumin2 +”‘))”;
System.out.print(sql);
conn = DriverManager.getConnection(url);
stmt = conn.createStatement();
stmt.execute(sql);
stmt.close();
conn.close();
%>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-KR”>
<title>Insert title here</title>
</head>
<body>
<table>
<tr>
<td>회원아이디</td>
<td><%= userId %></td>
</tr>
<tr>
<td>비밀번호</td>
<td><%= userPwd1 %></td>
</tr>
<tr>
<td>이름</td>
<td><%= userName %></td>
</tr>
<tr>
<td>주민등록번호</td>
<td><%= jumin1 %>-<%= jumin2 %></td>
</tr>
</table>
</body>
</html>
먼저 데이터베이스와의 연동을 위해 JDBC 드라이버를 로딩해야 한다. 드라이버의 로딩은 “Class.forName” 메소드를 이용한다. 프로그램에서 보면
(‘hong’, md5(‘1234’), ‘Hong Gil Dong’, ‘123456’, md5(‘7654321’))
+ userId +”‘, md5(‘”+ userPwd1 +”‘),'”+ userName +”‘,'”+ jumin1 +”‘,md5(‘”+ jumin2 +”‘))”
stmt.execute(sql);
conn.close();
다음 프로그램 “MemberView.jsp”는 “members” 테이블에 저장된 레코드를 출력하는 JSP 프로그램이다. 테이블 검색을 위해서 사용하는 SQL은 “SELECT” 문이다. “SELECT” 문은 “INSERT”, “DELETE”,”UPDATE” 문과는 달리 처리해야 하는 부분이 더 필요하다. “SELECT” 문을 실핼할 때도 서버연결, 데이터베이스 선택, 쿼리실행, 연결끊기의 네 단계가 필요하다. 그러나 “SELECT” 문의 경우 검색된 결과를 사용자에게 출력해야 하기 때문에 쿼리실행 후 검색된 레코드를 반복문을 통해 추출하고 출력하는 부분이 추가된다.
pageEncoding=”EUC-KR”%>
<%@ page import = “java.sql.*” %>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<%
Class.forName(“com.mysql.jdbc.Driver”);
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String url = “jdbc:mysql://localhost:3306/jsp?user=jsp&password=your_password”;
String sql = “SELECT userid, username, jumin1 FROM members”;
conn = DriverManager.getConnection(url);
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
%>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-KR”>
<title>Insert title here</title>
</head>
<body>
<%
while (rs.next()) {
%>
아이디 : <%= rs.getString(“userid”) %><br />
이름 : <%= rs.getString(“username”) %><br />
주민등록 : <%= rs.getString(“jumin1”) %><br />
<%
}
%>
</body>
</html>
<%
stmt.close();
conn.close();
%>
위 프로그램을 살펴보면 ResultSet 객체 rs를 선언하고 있다. 이 객체는 쿼리실행 단계에서 그 결과를 저장한다. 이 때 “SELECT” 문의 실행을 위해 stmt.execute가 아닌 stmt.executeQuery 메소드를 사용하고 있음에 주목하자. 저장된 결과는 ResultSet 형으로 검색된 모든 레코드를 가지고 있다. 여기서 각각의 레코드로 접근을 하기 위해서는 “next” 메소드를 이용한다. “next” 메소드가 호출되면 현 레코드에서 다음 레코드로 커서를 이동한다. 커서란 레코드를 가리키는 포인터를 의미한다. 만약 마지막 레코드인 경우 false를 돌려준다. 그러므로 반복문을 이용하면 모든 레코드를 읽을 수 있다.