<예시_1>
studentdatabasecp.jsp 파일 생성)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>stdentdatabasejdbc.jsp / 데이터베이스 자바빈즈 테스트 cp이용</title>
</head>
<%@ page import="java.util.ArrayList, univ.StudentEntity" %>
<body>
<h2>javaBeans SttudentDatabaseCP를 이용한 테이블 Student 조회 프로그램</h2>
<hr size="5" color="red">
<h2>학생정보조회</h2>
<jsp:useBean id="stdtdb" class="univ.StudentDatabaseCP" scope="page"/>
<%
ArrayList<StudentEntity>list = stdtdb.getStudentList();
int counter= list.size();
if(counter>0){
%>
<table border="2">
<tr>
<td align="center"><b>아이디</b></td>
<td align="center"><b>암호</b></td>
<td align="center"><b>이름</b></td>
<td align="center"><b>입학년도</b></td>
<td align="center"><b>학번</b></td>
<td align="center"><b>학과</b></td>
<td align="center"><b>핸드폰1</b></td>
<td align="center"><b>핸드폰2</b></td>
<td align="center"><b>주소</b></td>
<td align="center"><b>이메일</b></td>
</tr>
<%
for(StudentEntity stdt : list){
%>
<tr>
<td align="center"><%=stdt.getId() %></td>
<td align="center"><%=stdt.getPasswd() %></td>
<td align="center"><%=stdt.getName() %></td>
<td align="center"><%=stdt.getYear() %></td>
<td align="center"><%=stdt.getSnum() %></td>
<td align="center"><%=stdt.getDepart() %></td>
<td align="center"><%=stdt.getMobile1() %></td>
<td align="center"><%=stdt.getMobile2() %></td>
<td align="center"><%=stdt.getAddress() %></td>
<td align="center"><%=stdt.getEmail() %></td>
</tr>
<%
}
}
%>
</table>
<p>
<hr size="5" color="green">
조회된 학생 수가 <%=counter %>명 입니다
</body>
</html>
StudentDatabaseCP.java 파일 생성)
package univ;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class StudentDatabaseCP {
private Connection conn = null;
private PreparedStatement pstmt = null;
private DataSource ds = null;
public StudentDatabaseCP () { //생성자
try {
InitialContext ctx = new InitialContext();
ds = (DataSource)ctx.lookup("java:comp/env/jdbc/OracleDB");
} catch(Exception e) {
e.printStackTrace();
}
}
void connection() {
try {
conn = ds. getConnection();
}catch(Exception e) {
e.printStackTrace();
}
}
void disConnection() {
if(pstmt != null) {
try {
pstmt.close();
}catch(Exception e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
//게시판의 모든 레코드 반환하는 메소드
public ArrayList<StudentEntity> getStudentList(){
connection();
ArrayList<StudentEntity> list = new ArrayList<>();
String SQL = "select * from student";
try {
pstmt = conn.prepareStatement(SQL);
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
//한 행의 학생 정보를 저장할 자바빈즈 객체 생성
StudentEntity stu = new StudentEntity();
//한 행의 정보를 자바빈즈에 저장
stu.setId(rs.getString("id"));
stu.setPasswd(rs.getString("passwd"));
stu.setName(rs.getString("name"));
stu.setYear(rs.getInt("year"));
stu.setSnum(rs.getString("snum"));
stu.setDepart(rs.getString("depart"));
stu.setMobile1(rs.getString("mobile1"));
stu.setMobile2(rs.getString("mobile2"));
stu.setAddress(rs.getString("address"));
stu.setEmail(rs.getString("email"));
//리스트에 추가
list.add(stu);
}
rs.close();
}catch(Exception e) {
e.printStackTrace();
}finally {
disConnection();
}
return list;
}
}
↓결과
<게시판 예시>
oracle_1.sql에서 board_1테이블 생성)
create table board_1(
id number(20) not null,
name varchar2(20) not null,
passwd varchar2(20) not null,
title varchar2(100) null,
email varchar2(30) null,
regdate date null,
content varchar2(3000) null,
primary key(id)
)
primary key 중복 허용하지 않기 위해 sequence 생성)
create sequence board_1_seq
start with 1
increment by 1
maxvalue 10000
nocache
jdbc_1014폴더 editboard.jsp 파일생성)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>editboard.jsp / 게시판 기본 예제 : 게시 폼 작성</title>
</head>
<!-- 파일 boardform.js : 폼의 각 입력 값이 있는지를 검토하는 함수 생성 -->
<script src="boardform.js"></script>
<body>
<%@ page import ="univ.*" %>
<%
String name = "";
String email = "";
String title = "";
String content = "";
String headline = "등록";
String id = request.getParameter("id");
if(id != null){
//등록이 아닌 경우, 출력을 위해 선택한 게시의 각 필드 내용을 저장
int idnum = Integer.parseInt(id);
BoardDBCP brddb = new BoardDBCP();
BoardEntity brd = brddb.getBoard(idnum);
name = brd.getName();
email= brd.getEmail();
title = brd.getTitle();
content = brd.getContent();
headline = "수정 삭제";
};
%>
<h2>게시판 <%=headline %> 프로그램</h2>
<!-- 이 폼 데이터를 processboard.jsp로 넘김 -->
<form name =boardform method=post action="processboard.jsp">
<!--menu : 등록, 수정 또는 삭제 구분을 위한 매개변수로 이용 -->
<input type=hidden name="menu" value="insert">
<!-- 수정 또는 삭제를 위한 게시 id를 hidden으로 전송 -->
<input type=hidden name="id" value=<%=id %>>
<table>
<tr><td align=center>
<table>
<tr> <td colspan=2>
<table>
<tr>
<td>이름 : </td>
<td width=50>
<input type=text name=name value="<%=name %>" size=30 maxlength=20></td>
<td>이메일 : </td>
<td>
<input type=text name=email value="<%=email %>" size=35 maxlength=30></td>
</tr>
<tr>
<td width>제목 : </td>
<td colspan=3>
<input type=text name=title size=80 value="<%=title %>" maxlength=100></td>
</tr>
</table>
</td></tr>
<tr><td colspan=2>
<textarea name=content rows=10 cols=90><%=content %></textarea></td></tr>
<tr>
<td colspan=2>비밀번호 :
<input type=password name=passwd size=20 maxlength=15><br>
<font color=red>현재 게시 내용을 수정 또는 삭제하려면 이미 등록한 비밀번호가 필요합니다 </font> </td>
</tr>
<tr>
<td colspan=2 height=5 size=2></td>
</tr>
<tr>
<td colspan=2>
<% if(id==null){ %>
<!--버튼을 누르면 boardform.js의 함수를 실행하여 processboard.jsp로 이동 -->
<input type=button value="등록" onClick="insertcheck()">
<%} else{ %>
<!-- 버튼을 누르면 boardford.js의 각 함수를 실행하여 processboard.jsp로 이동 -->
<input type=button value="수정완료" onClick="updatecheck()">
<input type=button value="삭제" onClick="deletecheck()">
<%} %>
<!-- 목록보기 버튼을 listboard.jsp로 이동-->
<input type=button value="목록보기" onClick="location.href='listboard.jsp' ">
<input type=reset value="취소" >
</td>
</tr>
</table>
</td></tr>
</table>
</form>
</body>
</html>
univ폴더 BoardEntity.java파일 생성)
package univ;
import java.util.Date;
public class BoardEntity {
private int id;
private String name;
private String passwd;
private String title;
private String email;
private Date regdate;
private String content;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getRegdate() {
return regdate;
}
public void setRegdate(Date regdate) {
this.regdate = regdate;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
univ폴더 BoardDBCP.java파일 생성)
package univ;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class BoardDBCP {
//DBCP를 이용한 테이블 board_1 처리 데이터베이스 연동 자바빈즈 프로그램
private Connection con = null;
private PreparedStatement pstmt = null;
private DataSource ds = null;
//JDBC드라이버 로드 메소드
public BoardDBCP() { //생성자
try {
InitialContext ctx = new InitialContext();
ds = (DataSource)ctx.lookup("java:comp/env/jdbc/OracleDB");
}catch(Exception e) {
e.printStackTrace();
}
}
//데이터베이스 연결 메소드
public void connect() {
try {
con = ds.getConnection();
}catch(Exception e) {
e.printStackTrace();
}
}
public void disconnect() {
if(pstmt!= null) {
try {
pstmt.close();
}catch(SQLException e) {
e.printStackTrace();
}
}if( con != null) {
try {
con.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
//게시판의 모든 레코드를 반환 메소드
public ArrayList<BoardEntity> getBoardList(){
connect();
ArrayList<BoardEntity> list = new ArrayList<BoardEntity>();
//목록에 id 내림차순으로 정렬
String SQL = "select * from board_1 order by id desc";
try {
pstmt = con.prepareStatement(SQL);
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
BoardEntity brd = new BoardEntity();
brd.setId(rs.getInt("id"));
brd.setName(rs.getString("name"));
brd.setPasswd(rs.getString("passwd"));
brd.setTitle(rs.getString("title"));
brd.setEmail(rs.getString("email"));
brd.setRegdate(rs.getTimestamp("regdate"));
brd.setContent(rs.getString("content"));
//리스트에 추가
list.add(brd);
}rs.close();
}catch(SQLException e) {
e.printStackTrace();
}finally {
disconnect();
}return list;
}
//게시판의 선택한 필드의 레코드 반환 메서드
public ArrayList<BoardEntity> getSearchList(String name){
connect();
ArrayList<BoardEntity> list = new ArrayList<BoardEntity>();
String SQL = "select * from board_1 where name =?";
try {
pstmt = con.prepareStatement(SQL);
pstmt.setString(1, name);
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
BoardEntity brd = new BoardEntity();
brd.setId(rs.getInt("id"));
brd.setName(rs.getString("name"));
brd.setPasswd(rs.getString("passwd"));
brd.setTitle(rs.getString("title"));
brd.setEmail(rs.getString("email"));
brd.setRegdate(rs.getTimestamp("regdate"));
brd.setContent(rs.getString("content"));
//리스트에 추가
list.add(brd);
}rs.close();
}catch(SQLException e) {
e.printStackTrace();
}finally {
disconnect();
}return list;
}
//주 키 id의 레코드를 반환하는 메소드
public BoardEntity getBoard(int id) {
connect();
String SQL = "select * from board_1 where id=?";
BoardEntity brd = new BoardEntity();
try {
pstmt = con.prepareStatement(SQL);
pstmt.setInt(1, id);
ResultSet rs = pstmt.executeQuery();
rs.next();
brd.setId(rs.getInt("id"));
brd.setName(rs.getString("name"));
brd.setPasswd(rs.getString("passwd"));
brd.setTitle(rs.getString("title"));
brd.setEmail(rs.getString("email"));
brd.setRegdate(rs.getTimestamp("regdate"));
brd.setContent(rs.getString("content"));
rs.close();
}catch(SQLException e) {
e.printStackTrace();
}finally {
disconnect();
}return brd;
}
//게시물 등록 메서드
public boolean insertDB(BoardEntity board) {
boolean success = false;
connect();
String sql = "insert into board_1 values(board_1_seq.nextval,?,?,?,?,sysdate,?)";
try {
pstmt = con.prepareStatement(sql);
pstmt.setString(1, board.getName());
pstmt.setString(2, board.getPasswd());
pstmt.setString(3, board.getTitle());
pstmt.setString(4, board.getEmail());
pstmt.setString(5, board.getContent());
pstmt.executeUpdate();
success = true;
}catch(SQLException e) {
e.printStackTrace();
}return success;
}
//데이터 갱신을 위한 메서드
public boolean updateDB(BoardEntity board) {
boolean success = false;
connect();
String sql ="update board_1 set name=?, title=?, email=?, content=? where id=?";
//String sql ="update board_1 set name=?, title=?, emai=?, content=?, where title=?";
try {
pstmt = con.prepareStatement(sql);
//인자로 받은 객체를 이용해 사용자가 수정한 값을 가져와 SQL문 완성
pstmt.setString(1, board.getName());
pstmt.setString(2, board.getTitle());
pstmt.setString(3, board.getEmail());
pstmt.setString(4, board.getContent());
pstmt.setInt(5, board.getId());
int rowUdt = pstmt.executeUpdate();
//System.out.println(rowUdt);
if(rowUdt ==1)success = true;
}catch(SQLException e) {
e.printStackTrace();
return success;
}finally {
disconnect();
}return success;
}
//게시글 삭제를 위한 메서드
public boolean deleteDB(int id) {
boolean success = false;
connect();
String sql ="delete from board_1 where id=?";
try {
pstmt = con.prepareStatement(sql);
//인자로 받은 주 키인 id값을 이용해 삭제
pstmt.setInt(1,id);
pstmt.executeUpdate();
success = true;
}catch(SQLException e) {
e.printStackTrace();
return success;
}finally {
disconnect();
}return success;
}
//데이터베이스에서 인자인 id와 passwd가 일치하는지 검사하는 메서드
public boolean isPasswd(int id, String passwd) {
boolean success = false;
connect();
String sql = "select passwd from board_1 where id=?";
try {
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, id);
ResultSet rs = pstmt.executeQuery();
rs.next();
String orgPasswd = rs.getString(1);
if(passwd.equals(orgPasswd)) success = true;
System.out.println(success);
rs.close();
}catch(SQLException e) {
e.printStackTrace();
return success;
}finally {
disconnect();
}
return success;
}
}
jdbc_1014폴더 boardform.js파일 생성)
function deletecheck(){
if(document.boardform.passwd.value==""){
alert("암호를 입력해주세요");
document.boardform.passwd.focus();
return;
}
ok= confirm("삭제하겠습니까?");
if(ok){
document.boardform.menu.value="delete";
document.boardform.submit();
}else{
return;
}
}
function insertcheck(){
if(document.boardform.name.value==""){
alert("이름을 입력해주세요");
document.boardform.name.focus();
return;
}if(document.boardform.passwd.value==""){
alert("암호를 입력해주세요");
document.boardfrom.passwd.focus();
return;
}document.boardform.menu.value="insert";
document.boardform.submit();
}
function updatecheck(){
if(document.boardform.name.value==""){
alert("이름을 입력해주세요");
document.boardform.name.focus();
return;
}if(document.boardform.passwd.value==""){
alert("암호를 입력해주세요");
document.boardform.passwd.focus();
return;
}
document.boardform.menu.value="update";
document.boardform.submit();
}
jdbc_1014폴더 processboard.jsp파일 생성)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>process.jsp / 게시판 기본예제 : 게시글 등록 수정 삭제 처리</title>
</head>
<body>
<!-- 게시글 등록, 수정, 삭제를 위한 자바빈즈 선언 -->
<jsp:useBean id="brd" class="univ.BoardEntity" scope="page"/>
<jsp:useBean id="brddb" class="univ.BoardDBCP" scope="page"/>
<%
//한글 처리를 위해 문자 인코딩 지정
request.setCharacterEncoding("utf-8");
//insert, update, delete 중 하나를 지정
String menu = request.getParameter("menu");
//등록 또는 수정 처리 모듈
if(menu.equals("delete")|| menu.equals("update")){
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
int idnum = Integer.parseInt(id);
//데이터베이스 자바빈즈에 구현된 메소드 isPasswd()로 id와 암호가 일치하는지 검사
if(!brddb.isPasswd(idnum, passwd)) {
%>
<!-- 암호가 틀리면 이전화면으로 이동 -->
<script>alert("비밀번호가 다릅니다"); history.go(-1);</script>
<%
}else{
if(menu.equals("delete")){
//삭제를 위해 데이터베이스 자바빈즈에 구현된 메소드 deleteDB() 실행
brddb.deleteDB(idnum);
}else if(menu.equals("update")){
%>
<!-- 수정시 BoardEntity에 저장해야 하는 필드 id -->
<jsp:setProperty name="brd" property="id"/>
<jsp:setProperty name="brd" property="name"/>
<jsp:setProperty name="brd" property="title"/>
<jsp:setProperty name="brd" property="email"/>
<jsp:setProperty name="brd" property="content"/>
<%
//수정을 위해 데이터베이스 자바빈즈에 구현된 메소드 updateDB() 실행
brddb.updateDB(brd);
}
//기능 수행 후 다시 게스 목록 보기로 이동
response.sendRedirect("listboard.jsp");
}
}
else if(menu.equals("insert")){
%>
<!-- 등록 시 BoardEntity에 저장해야 하는 필드 passwd -->
<jsp:setProperty name="brd" property="name"/>
<jsp:setProperty name="brd" property="title"/>
<jsp:setProperty name="brd" property="email"/>
<jsp:setProperty name="brd" property="content"/>
<jsp:setProperty name="brd" property="passwd"/>
<%
//등록을 위해 데이터베이스 자바빈즈에 구현된 메소드 insertDB() 실행
brddb.insertDB(brd);
//기능 수행 후 다시 게시 목록 보기로 이동
response.sendRedirect("listboard.jsp");
}
%>
</body>
</html>
jdbc_1014폴더 listboard.jsp파일 생성)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시판 기본 예제 : 게시 목록 표시</title>
</head>
<body>
<h2>게시판 목록 표시 프로그램</h2>
<hr>
<%@page import="java.util.ArrayList, univ.BoardEntity, java.text.SimpleDateFormat" %>
<jsp:useBean id="brddb" class="univ.BoardDBCP" scope="page"/>
<%
//게시 목록을 위한 배열 리스트를 자바빈즈를 이용하여 확보
ArrayList<BoardEntity> list = brddb.getBoardList();
int counter = list.size();
int row = 0;
if(counter > 0) {
%>
<table>
<tr>
<th><font color=blue><b>번호</b></font></th>
<th><font color=blue><b>제목</b></font></th>
<th><font color=blue><b>작성자</b></font></th>
<th><font color=blue><b>작성일</b></font></th>
<th><font color=blue><b>전자메일</b></font></th>
</tr>
<%
//게시 등록일을 2022-10-14 14:33:21 형태로 출력하기 위한 클래스
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
for(BoardEntity brd : list) {
//홀짝으로 다르게 색상 지정
String color = "papayawhip";
if(++row % 2 == 0) color="white";
%>
<tr bgcolor=<%=color%>
onmouseover = "this.style.backgroundColor='SkyBlue'"
onmouseout = "this.style.backgroundColor='<%=color %>'">
<!-- 수정과 삭제를 위한 링크로 id를 전송 -->
<td align=center><a href="editboard.jsp?id=<%=brd.getId()%>"><%=brd.getId() %></a></td>
<td align=left><%=brd.getTitle() %></td>
<td align=center><%=brd.getName() %></td>
<!-- 게시 작성일을 2022-10-14 14:33:21 형태로 출력 -->
<td align=center><%=df.format(brd.getRegdate()) %></td>
<td align=center><%=brd.getEmail() %></td>
</tr>
<%
}
%>
</table>
<% } %>
<hr width=90%>
<p>조회된 게시판 목록 수가 <%=counter %>개 입니다.
<hr>
<form name=form method=post action="editboard.jsp">
<input type=submit value="게시등록">
</form>
</body>
</html>
↓ editboard.jsp결과
↓ listboard.jsp결과
'JSP' 카테고리의 다른 글
221018_JSP_JSTL_국비_if/ choose/ import/ redirec/ xml/ sql (0) | 2022.10.18 |
---|---|
221017_JSP_국비_EL연산자 /JSTL (0) | 2022.10.17 |
221013_JSP_JDBC_국비_Connection Pool (0) | 2022.10.13 |
221011_JSP_JDBC_국비_기초 (0) | 2022.10.11 |
221011_JSP_국비_자바빈즈2 (0) | 2022.10.11 |