반응형

H2 DB 연동 중에 다음과 같은 오류가 발생했다.

 

그림1. H2 Console 설정

H2 콘솔 설정은 다음과 같이 연결 후에

 

인텔리제이에서 아래와 같이 테스트 코드를 작성 하고 돌리면

 

다음과 같은 오류가 발생하였다.

오류 내용 : org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database may be already in use

 

해결 방법 : 

H2 콘솔 페이지에서 연결을 해제하고 하면 오류가 발생하지 않았다. 하지만 H2 콘솔과 인텔리제이에서 동시에 접속이 가능해야 했기때문에 방법을 찾아보았고, 해결 방법은 다음과 같았다.

 

application.properties

spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
#spring.datasource.url=jdbc:h2:~/Db명 # 수정 전
spring.datasource.url=jdbc:h2:tcp://localhost/~/Db명 # 수정 후
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=

H2 콘솔 접속 페이지

반응형
반응형

이번에는 게시판에 적힌 글을 조회하는 포스팅을 하도록 하겠습니다.

 

우선 reviewVo에 조회할 때 필요한 조회 종류를 추가해주도록 하겠습니다.

 

reviweVo.java

조회 기능까지 추가된 후의 reviewVo.java

package com.example.mall.domain;


public class reviewVo {

	/*
	 CREATE TABLE reviewTable (
	reNum INT AUTO_INCREMENT PRIMARY key,
	reTitle VARCHAR(20) NOT null,
	reContent text not null,
	reUser VARCHAR(20) NOT null,
	reregisterDate DATE DEFAULT NOW(),
	reCnt INT DEFAULT 0 # 조회수
	
	  
	 */
	
	private int reNum;
	private String reTitle;
	private String reContent;
	private String reUser;
	private String reregisterDate;
	private int reCnt;
	
	private String searchName, searchValue; // 이름별 검색, 제목별 검색
	public String getSearchName() {
		return searchName;
	}
	public void setSearchName(String searchName) {
		this.searchName = searchName;
	}
	public String getSearchValue() {
		return searchValue;
	}
	public void setSearchValue(String searchValue) {
		this.searchValue = searchValue;
	}
	public int getReNum() {
		return reNum;
	}
	public void setReNum(int reNum) {
		this.reNum = reNum;
	}
	public String getReTitle() {
		return reTitle;
	}
	public void setReTitle(String reTitle) {
		this.reTitle = reTitle;
	}
	
	public String getReContent() {
		return reContent;
	}
	public void setReContent(String reContent) {
		this.reContent = reContent;
	}
	public String getReUser() {
		return reUser;
	}
	public void setReUser(String reUser) {
		this.reUser = reUser;
	}
	public String getReregisterDate() {
		return reregisterDate;
	}
	public void setReregisterDate(String reregisterDate) {
		this.reregisterDate = reregisterDate;
	}
	public int getReCnt() {
		return reCnt;
	}
	public void setReCnt(int reCnt) {
		this.reCnt = reCnt;
	}
	
}

reviewMapper.xml

<!-- 게시글 검색하기 -->
	<select id="selectsearch" resultType="reviewVo">
		select * from reviewTable where ${searchName} like concat('%',#{searchValue},'%') <!-- #은 데이터값 -->
	</select>

 

reviewmapper.java

// 게시글 검색하기
	public List<reviewVo> selectsearch(reviewVo reviewvo) throws Exception;

 

reviewService.java

	// 게시글 제목 또는 작성자로 검색하기
	public List<reviewVo> selectsearch(reviewVo reviewvo) throws Exception {
		return reviewmapper.selectsearch(reviewvo);
	}

 

view에 검색할 수 있는 form 양식 작성

 

list.jsp 

기능 검색 추가된 list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
게시글 불러오기 
<br>
<table border="2">
<tr>
	<th>글번호</th><th>제목</th><th>내용</th><th>작성자</th><th>등록일</th><th>조회수</th>
</tr>
<c:forEach var="item" items="${relist}">
<tr>
<td>${item.reNum}</td>
<td><a href="detailreview?reNum=${item.reNum}">${item.reTitle}</a></td>
<td>${item.reContent}</td>
<td>${item.reUser}</td>
<td>${item.reregisterDate}</td>
<td>${item.reCnt}</td>
</c:forEach>
</table>
<a href="write">글쓰기</a>
<form action="search">
<table>
<tr>
<td><select name="searchName">
		<option value="reUser">작성자</option>
		<option value="reTitle">글제목</option>
		</select></td>
	<td colspan="2">
	<input type="text" name="searchValue">
	</td>
	<td>
	<input type="submit" value="검색">
	</td>
</tr>	
</table>
</form>
</body>
</html>

 

결과창

 

작성자 '롤'이 들어가는 글자로 검색해보겠습니다.

 

반응형
반응형

게시글을 클릭하면 조회수가 올라가도록 하는 글을 포스팅 하도록 하겠습니다.

 

reviewMapper.xml

	<!-- 조회수 올리기 -->
	<update id="updatereviewcnt">
		update reviewTable set reCnt = reCnt + 1 where reNum = #{reNum}
	</update>

update문으로 조회수(reCnt)를 1씩 증가시켜주도록 합니다.

 

reviewmapper.java

	// 문의글 조회수 올리기
	public int updatereviewcnt(String reNum);

reviewService.java

	// 조회수 올리기
	public int updatereviewcnt(String reNum) throws Exception {
		return reviewmapper.updatereviewcnt(reNum);
	}

 

reviewController.java

	// 게시글 자세히보기
	@RequestMapping(value="/detailreview")
	public ModelAndView detail(@RequestParam("reNum") String reNum) throws Exception {
		
		// 기존의 게시글 자세히 보기에서 추가된 부분
		reviewservice.updatereviewcnt(reNum);
		
		return new ModelAndView("detail","detail1",reviewservice.detail(reNum));
	}
    
    // 추가된 부분
    // reviewservice.updatereviewcnt(reNum);

 

글을 누르기 전

글을 누른 후

 

반응형
반응형

게시판 글쓰기 기능

 

글 등록하기

 

reviewController.java

// 게시판 글쓰기 기능
	@GetMapping("/write")
	public String writeform() throws Exception{
		return "/writeform";
	}
	@PostMapping("insert")
	public String insertreview(reviewVo reviewvo) throws Exception{
		boolean result = reviewservice.insertreview(reviewvo);
		if (result) {
			return "success";
		} else {
			return "error";
		}
	}

 

reviewMapper.xml

	<!-- 게시판 글쓰기 기능 -->
	<insert id="insertreview">
		insert into reviewTable(reTitle, reContent, reUser)  values(#{reTitle}, #{reContent}, #{reUser})
	</insert>

reviewmapper.java

	// 문의 글 쓰기
	public boolean insertreview(reviewVo reviewvo) throws Exception;

reviewService.java

	// 게시글 작성 
	public boolean insertreview(reviewVo reviewvo) throws Exception {
		return reviewmapper.insertreview(reviewvo);
	}

 

writeform.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
** 글쓰기 **
<form action="insert" method="post">
글제목: <input type="text" name="reTitle"><br>
작성자: <input type="text" name="reUser"><br>
글내용: <textarea rows="5" cols="30" name="reContent"></textarea>
<br><br>
<input type="submit" value="저장">
</form>
</body>
</html>

 

게시글 상세보기

글 제목을 누르면 해당하는 글 번호의 내용을 상세보기로 출력 시켜주도록 하는 방법입니다.

 

list.jsp의 내용을 변경

<td><a href="detailreview?reNum=${item.reNum}">${item.reTitle}</a></td>

 

reviewService.java 추가

	// 게시글 상세보기
	public reviewVo detail(Integer reNum) throws Exception {
		return reviewmapper.detail(reNum);
	}

 

reviewController.java 내용 추가

	// 게시글 자세히보기
	@RequestMapping(value="/detailreview")
	public ModelAndView detail(@RequestParam("reNum") int reNum) throws Exception {
		
		// 
		return new ModelAndView("detail","detail",reviewservice.detail(reNum));
	}

 

reviewmapper.java 내용 추가

	// 문의글 상세 보기
	public reviewVo detail(Integer reNum) throws Exception;

 

reviewMapper.xml 내용 추가

	<!-- 게시글 상세보기 -->
	<select id="detail" resultType="reviewVo">
		select * from reviewTable where reNum = #{reNum}
	</select>

 

detail.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
window.onload = function() {
	document.getElementById("btnList").onclick = function() {
		location.href="/";
	}
	document.getElementById("btnUpdate").onclick = function() {
		
		if(confirm("정말수정할까요")) {
	
			frm.action="/updatereview";
			frm.submit();
		}
	}
	document.getElementById("btnDelete").onclick = function() {
		if(confirm("정말 삭제할까요?")) {
			frm.action="deletereview";
			frm.submit();
		}
	}
}
</script>

</head>
<body>
** 상세보기 **
<br>
<form name="frm" method="get">
<table border="2">
	<tr>
		<td>번호</td>
		<td>${detail1.reNum}</td>
		<input type="hidden" value="${detail1.reNum}" name="reNum">
		
	</tr>
	<tr>
		<td>작성자</td>
		<td>${detail1.reUser}</td>	
	</tr>
		<tr>
		<td>제목</td>
		<td>${detail1.reTitle}</td>
	</tr>
		<tr>
		<td>글내용</td>
		<td>${detail1.reUser}</td>
	</tr>
	</tr>
	<tr>
		<td>작성일</td>
		<td>${detail1.reregisterDate}</td>
	</tr>
	<tr>
		<td>조회수</td>
		<td>${detail1.reCnt}</td>
	</tr>
		<tr colspan="3">
		<td>
		<input type="button" value="목록" id="btnList">
		<input type="button" value="수정" id="btnUpdate">
		<input type="button" value="삭제" id="btnDelete">
		</td>
	</tr>
</table>
</form>
</body>
</html>

 

글을 눌렀을때 나오는 결과 페이지

 

 

글 수정하기

우선 상세보기에 사용하였던 메소드를 수정할 jsp 폼에 불러옵니다.

 

reviewController.java

	@GetMapping("/updatereview")
	// 여기서 RequestParam("num")은 detail.jsp에서 input 값의 reNum
	public ModelAndView update(@RequestParam("reNum") String reNum) throws Exception {
		
		return new ModelAndView("upform","up",reviewservice.detail(reNum));
	}

upform.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
window.onload = function() {

	document.getElementById("btnUpdate").onclick = function() {
		
		if(confirm("정말수정할까요")) {
	
			frm.action="updatereviewcommit";
			frm.submit();
		}
	}
}
</script>

</head>
<body>
** 수정하기 **
<br>
<form name="frm" method="post">
<table border="2">
	<tr>
		<td>번호</td>
		<td>${up.reNum}</td>
		<input type="hidden" value="${up.reNum}" name="reNum">
		
	</tr>
	<tr>
		<td>작성자</td>
		<td>${up.reUser}</td>	
	</tr>
		<tr>
		<td>제목</td>
		<td><input type="text" value="${up.reTitle}" name="reTitle"></td>
	</tr>
		<tr>
		<td>글내용</td>
		<td><textarea rows="5" cols="50" name="reContent">${up.reContent}</textarea></td>
	</tr>
	</tr>
	<tr>
		<td>작성일</td>
		<td>${up.reregisterDate}</td>
	</tr>
	<tr>
		<td>조회수</td>
		<td>${up.reCnt}</td>
	</tr>
		<tr colspan="3">
		<td colspan="3">
		<input type="button" value="수정" id="btnUpdate" style="margin: auto; width: 100%;">
		</td>
	</tr>
</table>
</form>
</body>
</html>

 

 

여기서 제목과 내용을 수정 후 수정하기 버튼을 클릭 하면

 

reviewMapper.xml

	// 문의글 수정하기
	int updatereview(reviewVo vo) throws Exception;

 

reviewmapper.java

	// 문의글 수정하기
	int updatereview(reviewVo vo) throws Exception;

 

reviewService.java

	// 게시글 수정하기
	public int updatereview(reviewVo vo) throws Exception {
		return reviewmapper.updatereview(vo);
	}

reviewController.java

	@PostMapping("/updatereviewcommit")
	public String updatesubmit(reviewVo vo) throws Exception {
		int result = reviewservice.updatereview(vo);
		System.out.println("result " + result);
		if ( result > 0 )
			return "redirect:/";
		else
			return "error";
	}

 

현재 10번 글을 수정해보겠습니다.

 

 

 

 

글 삭제하기

 

reviewMapper.xml

	<!-- 글 삭제하기 -->
	<delete id="deletereview">
		delete from reviewTable where reNum = #{reNum}
	</delete>

 

reviewmapper.java

	// 게시글 삭제하기
	public int deletereview(String num) throws Exception;

 

reviewService.java

	// 게시글 삭제하기
	public int deletereview(String num) throws Exception {
		// TODO Auto-generated method stub
		return reviewmapper.deletereview(num);
	}

 

reviewController.java

	
	// 게시글 삭제하기
	@GetMapping("/deletereview")
	public String del(@RequestParam("reNum") String num) throws Exception {
		int delresult = reviewservice.deletereview(num);
		if(delresult > 0 )
			return "redirect:/";
		else
			return "error";
	}
	

 

현재 글이 10번까지 있는 것을 확인 할 수 있습니다.

 

10번 글을 지우도록 하겠습니다.

삭제가 정상적으로 된 것을 볼 수 있습니다.

 

반응형

+ Recent posts