52.Apache Project &.../Apache Commons DBUtils에서 Clob 사용하기 1010 2008. 8. 19. 16:45 반응형 DBUtils에서 Clob 사용하기 최근 오라클버젼들은 일반 String처럼 clob을 처리할 수 있지만 그렇지 않은 버젼들은 DBUtils를 조금 수정해 주서야 합니다 resultset의 메타 정보를 이용해서 컬럼 타입이 clob인 넘들만 따로 처리하는 로직입니다 org.apache.commons.dbutils.BasicRowProcessor.java 를 다음과 같이 수정한 후 다시 컴팔 하세요 private Object createBean( ResultSet rs, Class type, PropertyDescriptor[] props, int[] columnToProperty, int cols) throws SQLException { Object bean = this.newInstance(type); Object value = null; ResultSetMetaData meta = rs.getMetaData(); for (int i = 1; i <= cols; i++) { if (columnToProperty[i] == PROPERTY_NOT_FOUND) { continue; } PropertyDescriptor prop = props[columnToProperty[i]]; Class propType = prop.getPropertyType(); if ("CLOB".equals(meta.getColumnTypeName(i))) { value = readClob(rs, i); } else { value = rs.getObject(i); } if (propType != null && value == null && propType.isPrimitive()) { value = primitiveDefaults.get(propType); } this.callSetter(bean, prop, value); } return bean; } protected Object readClob(ResultSet rs, int idx) { StringBuffer stringbuffer = new StringBuffer(); char[] charbuffer = new char[1024]; int read = 0; Reader reader = null; String result = null; try { reader = rs.getCharacterStream(idx); while ((read = reader.read(charbuffer, 0, 1024)) != -1) stringbuffer.append(charbuffer, 0, read); result = stringbuffer.toString(); } catch (Exception exception) { System.out.println(exception); } finally { if (reader != null) try { reader.close(); } catch (Exception e){} } return result; }