JSP 게시판 글 등록을 누르면 오류가 발생합니다.

JSP 게시판 글 등록을 누르면 오류가 발생합니다.

QA

JSP 게시판 글 등록을 누르면 오류가 발생합니다.

본문

게시판등록 프로그램(editboard.jsp)에서 이름, 전자메일, 제목, 내용, 비밀번호를 입력 후 등록 버튼을 클릭하면 java.sql.SQLIntegrityConstraintViolationException: Column 'name' cannot be null 이라는 오류가 발생합니다. 분명히 이름을 입력했는데 왜 이런 오류가 발생하는건가요? 어느 부분이 잘못되었는지 못찾겠습니다.

 

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>
<center>
    <%@ 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 width=800 border=0 cellpadding=1 cellspacing=3>
    
    <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>
    <%
        //게시 등록일을 2010.3.15 10: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>
        <!--  게시 작성일을 2010.3.15 10:33:21형태로 출력 -->
        <td align=center><%= df.format(brd.getRegdate()) %></td>
        <td align=center><%= brd.getEmail() %></td>
    </tr>
    <%
        }
    %>
    </table>
<%    }
%>
<hr width=90%>
<p>조회된 게시판 목록 수가 <%=counter %>개 입니다.
</center><hr>
<center>
<form name=form method=post action=editboard.jsp>
        <input type=submit value="게시등록">
</form>
</center>
</body>
</html>

 

editboard.jsp (게시글 작성하는 화면)


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시판 기본 예제 : 게시 폼 작성</title>
</head>
<!--  파일 boardform.js : 폼의 각 입력 값이 있는지를 검토하는 함수 구현 -->
<script language=JavaScript 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><hr>
<center><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 width=100% border=0 cellspacing=0 cellpadding=7> 
<tr><td align=center>
    <table border=0> 
    <tr> <td colspan=2> 
        <table> 
            <tr> 
            <td width=80 >이 름 : </td> 
            <td width=100>
                <input type=text name=name value="<%=name%>" size=30 maxlength=20></td>
            <td width=80>전자메일 : </td> 
            <td width=100>
                <input type=text name=email size=30 value="<%=email%>" maxlength=30></td>
            </tr>
            <tr> 
            <td width=80>제 목 : </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><font color=red>
            현재 게시 내용을 수정 또는 삭제하려면 이미 등록한 비밀번호가 필요합니다.</font></td>
    </tr>
    <tr>
    <td colspan=2 height=5><hr size=2></td>
    </tr>
    <tr>
        <td colspan=2>
            <% if(id == null) { %>
                <!-- 버튼을 누르면 boardform.js의 함수를 실행하여 processboard.jsp로 이동 -->
                <input type=button value="등록" onClick="insertcheck()">
            <% } else { %>
                <!--  버튼을 누르면 boardform.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>
</center>
</body>
</html>

 

boardform.js (조건 확인하는 함수가 있는 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.boardform.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();
}

 

processboard.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>
<jsp:useBean id="brd" class="univ.BoardEntity" scope="page" /> 
<jsp:useBean id="brddb" class="univ.BoardDBCP" scope="page"/>
<%
    //한글 처리를 위해 문자인코딩 지정
    request.setCharacterEncoding("euc-kr");
    //등록(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>

 

BoardDBCP.java (DB에 실질적인 동작을 위해 있음)


package univ;
import java.sql.*;
import java.util.ArrayList;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class BoardDBCP {
    // 데이터베이스 연결관련 변수 선언
    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/mysql");
        }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>();
        
        String SQL = "select * from board";
        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 BoardEntity getBoard(int id) {
        connect();
        String SQL = "select * from board 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 values(0, ?, ?, ?, ?, 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;
        }
        finally {
            disconnect();
        }
        return success;
    }
    
    public boolean updateDB(BoardEntity board) {
        boolean success = false;
        connect();
        String sql = "update board set name=?, title=?, email=?, content=? where id=?";
        try {
            pstmt = con.prepareStatement(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();
            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 where id=?";
        try {
            pstmt = con.prepareStatement(sql);
            pstmt.setInt(1, id);
            pstmt.executeUpdate();
            success = true;
        } catch(SQLException e) {
            e.printStackTrace();
            return success;
        }
        finally {
            disconnect();
        }
        return success;
    }
    
    public boolean isPasswd(int id, String passwd) {
        boolean success = false;
        connect();
        String sql = "select passwd from board 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;
    }
}

 

BoardEntity.java (setter, getter)


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;
    }
}

 

boardform.js에서 함수가 실행됐을때 이름을 입력하라는 창이 뜨지 않는것을 보아 그 이후에 name에 저장된 내용이 사라지는것같은데 찾지 못하겠습니다. 도와주세요.

이 질문에 댓글 쓰기 :

답변 1

        <!-- 등록 시 BoardEntity에 지정해야 하는 필드 passwd -->
        <jsp:setProperty name="brd" property= "name"/> 
...

<jsp:setProperty name="brd" property="name" value="<%=request.getParameter("name")%>"/>

...

이런 식으로 해 보세요.

https://stackoverflow.com/questions/24770183/javabean-property-in-jsp

참고하세요.


 
답변을 작성하시기 전에 로그인 해주세요.
전체 2,661
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT