본문 바로가기
JSP

[JSP] JDBC을 이용하여 테이블에 데이터 관리하기

by NamGH 2023. 10. 4.
JDBC 절차
1. jar 파일 가져오기
2.드라이버 로드
3.sql문 분석
4.분석한 sql문 실행
5.접속 끊기(사용한 자원 반남)

 

select.jsp
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
select.jsp<br>

<h2>register 테이블의 레코드를 화면에 표시하는 예제</h2>
<table border = "1">
	<tr>
		<th>아이디</th>
		<th>패스워드</th>
		<th>이름</th>
		<th>성별</th>
		<th>email</th>
	</tr>	
	
<%
String driver = "oracle.jdbc.driver.OracleDriver";	
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String dbId = "sqlid";
String dbPw = "sqlpw";
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;

try{
	Class.forName(driver);
	conn = DriverManager.getConnection(url, dbId, dbPw);

	String sql = "select * from register";
	ps = conn.prepareStatement(sql);
	
	rs = ps.executeQuery();
	while(rs.next()){
		String id = rs.getString(1);
		String passwd = rs.getString(2);
		String name = rs.getString(3);
		String gender = rs.getString(4);
		String uname = rs.getString(5);
		String dname = rs.getString(6);
	%>
	<tr>
		<td><%=id %></td>
		<td><%=passwd %></td>
		<td><%=name %></td>
		<td><%=gender %></td>
		<td><%=uname %>@<%=dname %></td>
	</tr>
<%
	}//while
}catch(ClassNotFoundException e){
	e.printStackTrace();
}catch(SQLException e){
	e.printStackTrace();
}finally{
	try{
		if(ps != null) {
			ps.close();
		}
		if(rs != null){
			rs.close();
		}
		if(conn != null){
			conn.close();
		}
	}catch (SQLException e) {
		e.printStackTrace();
	}
}
%>
</table>

 

 

코드설명
드라이버를 로그하고 sql문 분석하고 sql문을 실행한후 select를 할것이기때문에executeQuery 를 사용해 데이터를 읽고 Resultset을 이용해 저장된 데이터들을 가져온다 가져온값들을 td안에 하나하나 넣어주는 코드이

 

 

실행결과

 

 

insert.jsp
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
insertProc.jsp<br>

<%
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
String name = request.getParameter("name");
long time = System.currentTimeMillis(); //실행한 현재 시간정보
Timestamp register = new Timestamp(time); //숫자를 날짜형태로 변환

String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String dbId = "sqlid";
String dbPw = "sqlpw";
Connection conn = null;
PreparedStatement ps = null;

try{
	Class.forName(driver);
	
	conn = DriverManager.getConnection(url,dbId,dbPw);
	String sql = "insert into member values(?,?,?,?)";
	
	ps = conn.prepareStatement(sql);
	ps.setString(1, id);
	ps.setString(2, passwd);
	ps.setString(3, name);
	ps.setTimestamp(4, register);
	ps.executeUpdate();
	
}catch(Exception e){
	e.printStackTrace();
}
%>

 

코드설명
form에서 데이터를 넣어서 submut으로 보내면request로 값을 가져오고 db를 연결해준다 sql문의 ?의경우 아래 setString에서 ps.setString(순서,넣을데이터)이기때문에 ?에 넣을값들을 대입해주고 데이터를 삽입하는 코드이기때문에 select에서 썻던 executeQuery말고 Update를 사용하여 데이터를 추가해준다

 

실행결과

 

form
데이터삽입

 

 

update.jsp
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
updateProc.jsp<br>

<%
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
String name = request.getParameter("name");

String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String dbId = "sqlid";
String dbPw = "sqlpw";

Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;

try{
	Class.forName(driver);
	conn = DriverManager.getConnection(url,dbId,dbPw);
	String sql = "select id,passwd from member where id = ?";

	ps = conn.prepareStatement(sql);
	ps.setString(1, id);
	rs = ps.executeQuery();
	if(rs.next()){
		String mPw = rs.getString("passwd");
		if(mPw.equals(passwd)){
			String sql2 = "update member set name = ? where id = ? and passwd = ?";
			ps = conn.prepareStatement(sql2);
			ps.setString(1, name);
			ps.setString(2, id);
			ps.setString(3, passwd);
			
			ps.executeUpdate();
			
			System.out.print("수정 완료");
		}else{
			System.out.print("비밀번호가 일치하지 않습니다");
		}
	}else{
		System.out.print("아이디가 존재하지 않습니다");
	}
}catch(Exception e){
	e.printStackTrace();
}finally{
	try{
		if(ps != null){
			ps.close();
		}
		if(rs != null){
			rs.close();
		}
		if(conn != null){
			conn.close();
		}
	}catch(Exception e){
		e.printStackTrace();
	}
}
%>

 

 

실행결과
form

 

 

delete
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
deleteProc.jsp<br>

<%
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");

String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String dbId = "sqlid";
String dbPw = "sqlpw";
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;

try{
	Class.forName(driver);

	conn = DriverManager.getConnection(url,dbId,dbPw);
	String sql = "select id,passwd from member where id = ?";
	ps = conn.prepareStatement(sql);
	ps.setString(1, id);
	rs = ps.executeQuery();

	if(rs.next()){
		String mPw = rs.getString("passwd");
		if(mPw.equals(passwd)){
			String sql2 = "delete from member where id = ?";
			ps = conn.prepareStatement(sql2);
			ps.setString(1, id);
			ps.executeUpdate();
			out.println("삭제성공");
			%>
			<meta http-equiv="refresh" content="0; url=select.jsp">
			<%
		}else{
			out.println("비밀번호가 일치하지 않습니다");
		}
	}else{
		out.println("아이디가 존재하지 않습니다");
	}
}catch(Exception e){
	e.printStackTrace();
}finally{
	try{
		if(ps != null){
			ps.close();
		}
		if(rs != null){
			rs.close();
		}
		if(conn != null){
			conn.close();
		}
	}catch(Exception e){
		e.printStackTrace();
	}
}
%>

 

코드설명
update와 delete의 경우 비슷한데 바로 update나 delete를 하는것이 아닌 먼저 select로 검색을 한후에
update나 delete를 시도한다는 것이다 그래서 두가지의 sql문을 사용하는데 첫번째는 select를 사용하기 때문에 executeQuery를 사용하고 update나 delete의 경우 데이터를 관리하는것이기때문에 executeUpdate를 사용한다
rs.next의 경우 한줄한줄 읽겠다는 뜻으로 애초에 if문을 사용해 id가 일치하지 않는다면 rs.next안으로 들어갈수
없게 작성했다
후에 request로 가져온 passwd와 읽은 id에서 가져온 passwd를 가져와 equals문을 이용해 비교하였다

delete의 경우에는 <meta http-equiv="refresh" content="0; url=select.jsp">를 사용해 삭제하기 버튼을 누르면 발로
테이블이 있는 select.jsp로 이동하게 설정했다

 

실행결과

 

 

'JSP' 카테고리의 다른 글

[JSP] forward를 이용한 색 사진 넣기  (0) 2023.09.26
[JSP] forwardTag  (0) 2023.09.26
[JSP] includeActionTag  (0) 2023.09.25
[JSP] session  (0) 2023.09.25
[JSP] response  (0) 2023.09.25