티스토리 뷰

공부 이야기

[JSP] 이메일 보내기5

판다(panda) 2011. 9. 15. 00:00
지난 시간에 여기까지 했는데요..

주소록 폼 작성, 이메일 등록/검색 폼 작성, 이메일 DB 등록..



오늘은 등록된 이메일 주소가 주소록에 보여지는 것과 수정/삭제를 해보겠습니다..

지금까지는 게시판 만들기와 차이가 없죠..
이메일 보내는 부분부터 보시려면.. 다음 글로 바로 넘어가시는게 좋을겁니다..

이메일 보내기가 주 내용이지만.. 게시판 만들기 복습?.. 도 포함되어있거든요..

그럼 리스트 보여주기 페이지 시작하겠습니다..

mail_address.jsp 에 추가/수정을 하겠습니다..

오라클 커넥션 메소드를 추가해줍니다..
<%!
Connection DB_Connection() throws ClassNotFoundException, SQLException, Exception
{
String url = "jdbc:oracle:thin:@127.0.0.1:1521:ORACLE";
String username = "study";
String userpass = "study";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection(url, username, userpass);
return conn;
}

String TO_DB( String str ) throws Exception
{
if( str == null )
return null;
return new String( str.getBytes( "8859_1" ), "euc-kr" );
}
%>

지난번 게시판에서는 페이지 넘김이 따로 없고 [1][2][3][4][5] 이런식으로 계속 나열되게 만들어봤습니다..



아니 만들어봤습니다는 아니고 그렇게 만들 수 밖에 없었습니다;..
이번에는 이런식으로 가운데 페이지 번호를 넣고 양 옆에 화살표를 넣어보겠습니다..




이게 따로 java 클래스 불러다가 한것이라.. java 를 추가해야하는데.. 자바클래스 넣기 힘들때.. 그런 경우가 있으니까요;..
우선 해보고 안되면;.. 위에 방법대로 하겠습니다;..

뭐가 문제인것인지.. 자꾸 내부 오류 코드 라고 뜨네요..



지식인 검색결과..


9i 의 jdbc 디렉토리에 보시면 classes12.jar 파일이 있을 텐데요. 이것을 가져다 사용하시지요.
또는 현재 oracle 에서 제공하는 ojdbc14.jar 파일을 oracle 사이트에서 받아서 설치하면 됩니다. 라고 하는데..

이미 다 설치되어있고.. 위에 보시면 아시겠지만.. 원래 되던것이고;..
클래스 안쓰고 하려니까 복잡해지는군요;..

최대한 쉬운 방법으로 진행하려고 했는데.. 이거 시간이 조금 걸릴것 같습니다;..

미안합니다;.. 제가 초보라;.. 이거 해결할때까지 우선 잠정 중단을;..
내일이라도 해결하면 바로 다시 시작하겠지만.. 이거 꽤나 오래걸릴것 같은 느낌이 드네요.. 

음.. 이 페이지의 문제점을 분석한 결과.. 한페이지에서 2개의 쿼리를 처리 못하는것 같습니다..

지금 제 실력으로 처리할 수 있는 방법은 딱 하나;..

페이지를 나눠서 한페이지에 한개의 쿼리만 넣는것이지요;.. 그 방법밖에는 지금 방법이 없네요..

뭐가 문제인지 도무지 모르겠네요..

저 문제에 대해서 대부분의 내용이..

/WEB-INF/lib/ 에 있는 모든 오라클 jdbc (classes111.jar, classes12.jar, ojdbc14.jar) 를 삭제하시고
각 환경에 맞는 오라클 jdbc를 /WEB-INF/lib/에 복사하여 재설치 하시기 바랍니다

라고 하는데.. 저는 되는데.. 다른 경로에 페이지를 만들면 안된다는것이죠;..

리눅스 설치할때, 오라클 설치할때.. 이것저것 막 복사해가지고;.. 뭐가 필요한건지 전혀 모르겠습니다;..

그럼 내용을 또 전부 수정해야겠군요;..

ps. WEB-INF 에 위에 classes111.jar, classes12.jar, ojdbc14.jar 를 추가해주진 않았지만.. 되네요;..
09월 16일.. 그러니까 이 글을 쓴 그 다음날이죠..



우선 해결 방법으로는..
1번.. 지식인 방법으로 파일을 바꿔본다..
2번.. 한 페이지당 쿼리는 한개만 넣는다;..
3번.. 편법을 사용해서 자~알 한다;..

저는 우선 편법을 사용했습니다.. 되니까; 뭐;.. 그냥 사용하면 될것 같네요가 아니라;..
방법을 찾아야 하는데;.. 우선 제가 쓴 편법은 다음과 같습니다..

한개의 쿼리를 불러오고 rs.close(), stmt.close(), conn.close() 을 하게 됩니다..
대부분의 쿼리가 다 그렇죠..

query.setLength(0); 를 해서 쿼리를 초기화 한 다음 다른 쿼리를 불러오는 경우도 있습니다..

이 방법은 지금 하고 있구요.. 위에 말했던 것 처럼 편법을 우선 알려드리겠습니다..

오라클 메소드를 다른이름으로 한개 더 선언해주는것이죠.. 전 conn1 이라고 만들었습니다..
<%!
 Connection DB_Connection1() throws ClassNotFoundException, SQLException, Exception
 {
  String url = "jdbc:oracle:thin:@127.0.0.1:1521:ORACLE";
  String username = "study";
  String userpass = "study";
  Class.forName("oracle.jdbc.driver.OracleDriver");
  Connection conn1 = DriverManager.getConnection(url, username, userpass);
  return conn1;
 }
%>

그리고 쿼리가 종료 된 다음 부분에 다시 넣어줬습니다..

 Connection conn1 = DB_Connection1();
 Statement stmt1 = null;
 ResultSet rs1 = null;
 StringBuffer query1 = null;

그리고 두번째 쿼리는 이쪽에 맞춰서 다시 작성했죠.. 그러니까 되네요;..
단순히 코딩 문제로 되고 안되고 하는것 같네요;..

우선 게시판에서 글 목록 보여주기랑 똑같습니다..

각 내용을 정의해주고.. 중간 중간에 쿼리를 만들어봅시다..
<%
 Connection conn = DB_Connection();
 Statement stmt = null;
 ResultSet rs = null;
 StringBuffer query = null;

 String totalCount = "";
 String user_seq = "";

 String user_email = request.getParameter( "user_email" );
 String user_name = request.getParameter( "user_name" );
 user_name = TO_DB( user_name );
%>

우선 등록된 메일 개수를 확인하는 쿼리입니다..
<%
 try {
  stmt = conn.createStatement();
  query = new StringBuffer();

  query.append("SELECT COUNT(*) TOTAL FROM STUDY.EMAIL_USER \n");
  rs = stmt.executeQuery(query.toString());

  if (rs.next()) {
   totalCount = rs.getString("TOTAL");
  }
  rs.close();
%>

테이블에서 등록된 유저 칼럼을 카운트해서.. 카운트값을 받습니다..

그리고 뿌려주는거죠..

<table width="600" border="0" cellpadding="0" cellspacing="0">
 <tr>
  <td height="2"><b>등록된 이메일 : <%=totalCount %></b></td>

그리고 이 쿼리 후 query.setLength(0); 으로 쿼리를 초기화 해주고.. 다음 쿼리를 진행하면 되는데..

이부분에서 내부 오류 코드 인수 ORA-00600 가 나온겁니다.. 이걸 아까 편법으로 진행을 했었는데요..

되서 올리려고 하다가;.. 이런 방법이 언제까지 통할지도 모르고;.. 해서.. 다른곳에 있던 WEB-INF를 덮어쓰기했습니다..

덮어써서 되는건 확실한것 같습니다;.. 그런데 classes111.jar, classes12.jar, ojdbc14.jar 은 없는데.. 되네요;..

우선 되니까;.. 쿼리를 초기화 해주고 다른 쿼리를 불렀습니다..
<%
  query.setLength(0);
  query
   .append("SELECT \n")
   .append(" RNUM, USER_SEQ, USER_EMAIL, USER_NAME, USER_HP, REG_DATE \n")
   .append("FROM ( \n")
   .append(" SELECT \n")
   .append("  ROWNUM RNUM, USER_SEQ, USER_EMAIL, USER_NAME, USER_HP, REG_DATE \n")
   .append(" FROM ( \n")
   .append("  SELECT \n")
   .append("   USER_SEQ, USER_EMAIL, USER_NAME, USER_HP, REG_DATE \n")
   .append("  FROM ( \n")
   .append("   SELECT \n")
   .append("    USER_SEQ, \n")
   .append("    USER_EMAIL, \n")
   .append("    USER_NAME, \n")
   .append("    USER_HP, \n")
   .append("    REG_DATE \n")
   .append("   FROM \n")
   .append("    STUDY.EMAIL_USER \n")
   .append("  ORDER BY REG_DATE DESC \n")
   .append(" ))) \n");

//  out.print(query.toString());
  rs = stmt.executeQuery(query.toString());

  for (int i = 1; rs.next(); i++) {
%>

 <tr align="center" bgcolor="#<%=i%2 == 1?"FFFFFF":"F9F8ED"%>">
  <td height="30"><%=i %></td>
  <td><%=rs.getString("USER_NAME") %></td>
  <td><%=rs.getString("USER_EMAIL") %></td>
  <td><%=rs.getString("USER_HP") %></td>
  <td><b>편집</b></td>
 </tr>

편집은 아직입니다;.. 여기 수정 삭제를 넣을껀데요..
이게 갑자기 되는 터라;.. 미처 준비를 하지 못했네요;..

카운트가 0일때.. 등록된 수신자가 없다라는 칸을 넣어줍니다..
<%
  }
 if (totalCount.equals("0")) {
%>

 <tr align="center" bgcolor="#FFFFFF" height="20">
  <td colspan="5">등록된 수신자가 없습니다</td>
 </tr>


그리고 쿼리 종료.. rs, stmt, conn 종료..
<%
  }
 }
 catch( Exception e ) {
  out.println( e.toString() );
 }
 finally {
  rs.close();
  stmt.close();
  conn.close();
 }
%>

</table>
</form>

우선 즐거운 금요일이라;.. 일찍;.. 들어가려구요;..

오늘의 소스를 올려드릴께요..



우선 WEB-INF 에 관해서는 더 자세히 알아보고.. 중간 중간 틈나는대로 올려드릴께요..

솔직히 제대로 코딩해주면 되는것 같은데 방법을 몰라 힘들게 돌아서 가게 되네요;.. 죄송합니다..

게시판 찾는 분들은 많은데.. 이메일 보내기 찾는 분은 거의 없네요..

올리는 시간에 여유를 둬도 될것 같군요 ㅎㅎ.. 다른 업무때문에 잠시 미뤄야겠습니다 다시한번 죄송합니다..



저작권 표시 꼭!.. 상업적 이용 절대 불가!.. 컨텐츠 변경 안됨!..