ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ResultSet에서 LONG VARCHAR 읽어오기
    Data Base/MySQL 2007. 11. 26. 17:51

    String data = null; //스트림으로 읽어 온 데이터를 저장한다.
    java.io.Reader reader = null; //LONG VARCHAR 데이터를 읽어 올 스트림
    try{
        reader = rs.getCharacterStream("FIELD"); //스트림을 읽어옴

        if(reader ! = null ){
            //스트림에서 읽어 온 데이터를 저장할 버퍼
            StringBuffer buff = new StringBuffer();
            char[] ch = new char[512];
            int len = -1;

            //스트림에서 데이터를 읽어와 버퍼에 저장한다.
            //reader로부터 데이터를 읽어와 StringBuffer에 저장한다.
            while(len = reader.read(ch)) != -1){
                buff.append(ch,0,len);
            }
           
            //버퍼에 저장된 내용을 String으로 전환
            data = buff.toString();
        }
    }catch(IOException ex){
        //예외발생
        //reader.read()메소드는 IOException을 발생할 수 있다.
    }finally{
        if(reader != null) try {reader.close();} catch(IOException ex){}
    }
    //...data를 사용

    ===================================================================
    <%@ page contentType="text/html;charset=euc-kr" %>

    <%@ page import = "java.sql.DriverManager" %>
    <%@ page import = "java.sql.Connection" %>
    <%@ page import = "java.sql.Statement" %>
    <%@ page import = "java.sql.ResultSet" %>
    <%@ page import = "java.sql.SQLException" %>
    <%@ page import = "java.io.Reader" %>
    <%@ page import = "java.io.IOException" %>

    <%
     String memberID = request.getParameter("memberID");
    %>
    <html>
    <head><title>회원 정보</title></head>
    <body>

    <%
     Class.forName("com.mysql.jdbc.Driver");

     Connection conn = null;
     Statement stmt = null;
     ResultSet rs = null;
     
     try {
      String jdbcDriver = "jdbc:mysql://localhost:3306/chap11?useUnicode=true&characterencoding=euc-kr";
      String dbUser = "jspexam";
      String dbPass = "jspex";
      String query = "select * from MEMBER_HISTORY where MEMBERID = '" + memberID + " ' ";
           
     
            conn = DriverManager.getConnection(jdbcDriver, dbUser, dbPass);
            stmt = conn.createStatement();
           
            rs = stmt.executeQuery(query);
            if(rs.next()) {
    %>
    <table border="1">
    <tr>
        <td>아이디</td><td><%= memberID %></td>
    </tr>
    <tr>
        <td>히스토리</td>
        <td>
    <%
                String history = null;
                Reader reader = null;
                try {
                    reader = rs.getCharacterStream("HISTORY");
                   
                    if (reader != null) {
                        StringBuffer buff = new StringBuffer();
                        char[] ch = new char[512];//한번에 512 바이트 만큼 읽어 온다.
                        int len = -1;
                       
                        while( (len = reader.read(ch)) != -1) {
                            //(reader.read(ch))
                            //=>ch 배열의 문자열 수를 읽어 옵니다.
                            //반환타입은 읽힌 문자수를 반환한다.
                            //읽던 글자의 마지막에 커서를 옮겨놓고 다음에 거기서부터 시작한다.
                            //while문에서 나가는 조건을 잘 모르겠네;;
                            System.out.println((len = reader.read(ch)));
                            buff.append(ch, 0, len);
                        }
                       
                        history = new String(buff.toString().getBytes("8859_1"),"KSC5601");
                    }
                } catch(IOException ex) {
                    out.println("예외 발생:"+ex.getMessage());
                } finally {
                    if (reader != null) try { reader.close(); } catch(IOException ex) {}
                }
    %>
        <%= history %>
        </td>
    </tr>
    </table>
    <%
      }else{
    %>
    <%= memberID %> 회원의 히스토리가 없습니다.
    <%
      }
     }catch(SQLException ex){
    %>
    에러 발생 : <%=ex.getMessage() %>
    <%
     }finally{
      if(rs != null) try{rs.close();}catch(SQLException ex) {}
      if(stmt != null) try {stmt.close();}catch(SQLException ex){}
      if(conn != null) try {conn.close();}catch(SQLException ex){}
     }
    %>
    </body>
    </html>

    =====================================================================

Designed by Tistory.