* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
Window7 32bit, Linux 64bit 등 | |
[cubrid_rel] 수행 결과 | |
[도움말]-[버전정보] 확인 | |
java, php, odbc 등 입력 |
* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 | 재현 가능한 Source와 SQL |
관련 테이블(인덱스, 키정보 포함) 정보 | CUBRID 홈 디렉토리 아래 log 디렉토리 압축 |
-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
BLOB 타입 이미지를 JSP로 웹에 뿌려주려면 어떻게 해야하나요?
SQL은 다음과 같이 했습니다.
SELECT
BLOB_TO_BIT(mem_img)
FROM
member
안녕하세요. 큐브리드를 사랑해주셔서 감사합니다.
제가 해결한 방법을 말씀드리자면요.
서블릿 클래스 하나를 생성하여서 blob 컬럼을 조회 해서
ServletOutputStream 객체에 write하는 방식으로 처리했습니다.
예제 소스코드는 아래와 같습니다.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("image/jpeg");
int num = Integer.parseInt(request.getParameter("num")); // blob 테이블의 index 번호입니다.
String className = "cubrid.jdbc.driver.CUBRIDDriver";
String url = "jdbc:cubrid:<ip>:<port>:<db_name>:<id>:<pwd>:";
String sql = "select blob from blob_tbl where id=?"; // blob을 조회하는 쿼리입니다.
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
Blob blob = null; // blob 데이터를 저장할 객체 생성
ServletOutputStream sOut = response.getOutputStream(); // 이미지를 출력할 outputStream 객체 생성
try {
Class.forName(className);
conn = DriverManager.getConnection(url);
System.out.println("conn : " + conn);
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, num);
rs = pstmt.executeQuery();
if(rs.next()) {
blob = rs.getBlob(1); // blob 객체에 blob 데이터 저장
}
sOut.write(blob.getBytes(1, (int)blob.length())); // outputStream 객체에 blob 객체를 byte[] 로 만들어서 쓰기
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(sOut != null) sOut.close();
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
위와 같은 소스코드로 서블릿 클래스를작성하여 web.xml 파일에 등록 후
jsp 페이지에서 호출하면 정상적으로 이미지가 출력됩니다.
감사합니다.