위로 아래

JSP를 이용한 게시글 쓰기를 만들 던 중,

데이터베이스에 데이터를 INSERT하려다가 오류가 발생했다.

오류 발생 위치는 BoardWriteAction.jsp

입력 form이 위치한 BoardWriteForm.jsp에서 데이터를 전달 받고, DAO를 통해 데이터베이스와 통신해서 데이터를 처리한 후, controller를 이용해 페이지를 이동하는 역할을 하는 model이다. 

 

 

오류 위치를 찾기 위해 전체적인 흐름부터 되짚어보자.

BoardWriteForm.jsp에서 게시글에 입력할 subject, writer, content, passwd를 입력하면, 이 정보들을 BoardWriteAction.jsp (로직을 JSP로 처리해보는 연습을 하는 중이다) 전송한다. 

BoardWriteAction.jsp는 request.getParameter로 subject, writer, content, passwd를 불러오고, 데이터 전달 역할의 DTO에 이를 저장한다.

그리고 DTO를 통해 DAO에 데이터를 전달해 데이터베이스에 접근한다. DAO는 데이터베이스에 subject, writer, content, passwd의 데이터를 INSERT한다.

이것이 완료되면 BoardWriteAction.jsp는 BoardList.jsp로 화면을 이동시킨다.

 

 

오류가 발생한 BoardWriteAction.jsp는 DTO와 DAO를 모두 사용한다. 가장 오류가 뜰만한 곳이면서 어디서 오류가 뜬 것인지 좁히기 어려운 곳이다. 이클립스의 콘솔창을 확인한다.

conn이 비어 있다는 NullPointException이 떠있다.

conn은 데이터베이스와 연결하는 역할을 한다. 문제는 DBConnectionManager에 있을 수 있다. 그러나 url, user, pawd를 모두 확인해보았으나 문제가 없었다. DAO의 conn에도 문제가 없다. 

 

 

웹 서핑 중 위의 문제는 데이터베이스 드라이버 파일을 못 찾기 때문일 수 있다는 정보를 찾았다.

아뿔사, 새로 프로젝트를 만들면서 mySQL의 드라이버 파일을 새로 넣지 않았다.

파일을 넣으니 NullPointException 문제는 해결되었다.

그러나 여전히 데이터베이스의 정보를 받아오지 못하고 있다.

sendRedirect까지 무사히 처리되었으나, 데이터베이스에서 받아온 데이터의 개수가 0으로 표시된다.

보란듯이 데이터베이스가 텅텅 비어있다..!

오류 내용은  NVL 함수. 어째서?

검색을 해보니 MySQL에는 NVL 함수가 없다..!

bno를 최신 숫자로 입력하려던 SELECT문에서 오류가 발생한 것이다.

 

대신 IFNULL함수를 이용한다.

 

결과는?

 

성공이다!