테스트 사이트 - 개발 중인 베타 버전입니다

jsp 게시판 등록 오류 채택완료

Sssuj 4년 전 조회 3,478

게시판 등록이 안되는 오류가 발생하는데 어떤 곳에 문제가 있는지 정말 모르겠습니다. 

왜 안되는건지 오류 찾는게 너무 어렵네요.

 

listboard.jsp

</strong></p>

<p><strong><%@ 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></strong></p>

<p><strong></body>

</html></strong></p>

<p><strong>

 

BoardEntity.java

</strong></p>

<p><strong>package univ;</strong></p>

<p><strong>import java.util.Date;</strong></p>

<p><strong>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;

    }

}</strong></p>

<p><strong>

 

BoardDBCP

</strong></p>

<p><strong>package univ;</strong></p>

<p><strong>import java.sql.*;

import java.util.ArrayList;</strong></p>

<p><strong>import javax.naming.InitialContext;

import javax.sql.DataSource;</strong></p>

<p>

<strong>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(o,?,?,?,?,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;

    }

}</strong></p>

<p><strong>

 

editboard.jsp

</strong></p>

<p><strong><%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>게시판 기본 예제 : 게시 폼 작성</title>

</head></strong></p>

<p><strong><!--  파일 boardform.js : 폼의 각 입력 값이 있는지를 검토하는 함수 구현 -->

<script language=JavaScript src="boardform.js"></script></strong></p>

<p><strong><body></strong></p>

<p><strong>    <%@ 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></strong></p>

<p><strong><center><form name=boardform method=post action="processboard.jsp">

<!--  menu : 등록, 수정 또는 삭제 구분을 위한 매개변수로 이용 -->

<input type=hidden name="menu" value="insere">

<!-- 수정 또는 삭제를 위한 게시 id를 hidden으로 전송 -->

<input type=hidden name="id" value=<%=id %>></strong></p>

<p><strong><table width=100% border=0 cellspacing=0 cellpadding=7> 

<tr><td align=center></strong></p>

<p><strong>    <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>

            <% 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></strong></p>

<p><strong>

 

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></strong></p>

<p><strong>

 

boardform.js

</strong></p>

<p><strong>/**

 * 

 */</strong></p>

<p><strong>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;

    }

}</strong></p>

<p><strong>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();

}</strong></p>

<p><strong>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.thenu.value='update'; 

    document.boardform.submit();

}</strong></p>

<p><strong>

 

대체 어떤 부분에서 어떤 이유로 게시글 등록이 안되는건가요?ㅠㅠ

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
        String sql = "insert into board values(o,?,?,?,?,sysdate(),?)";
valuues 처음에 있는 o는 무엇인가요?
로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

S
Sssuj
4년 전
저 부분은 0으로 수정 완료하였는데 계속해서 오류가 발생합니다.
java.sql.SQLIntegrityConstraintViolationException: Column 'name' cannot be null
이 오류가 게시판 작성한 것을 등록하게 되면 발생하는게 어떤 부분을 수정해야 할지 모르겠습니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인