oracle
DatabaseMetaData
COLUMN_DEF 를 가지고 올때
아래와 같은 에러가 발생하였다 .
이유를 찾아본결과.
java.sql.SQLException: 스트림이 이미 종료되었습니다
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:227)
at oracle.jdbc.driver.LongAccessor.getBytes(LongAccessor.java:166)
at oracle.jdbc.driver.LongAccessor.getString(LongAccessor.java:207)
at oracle.jdbc.driver.T4CLongAccessor.getString(T4CLongAccessor.java:390)
at oracle.jdbc.driver.OracleResultSetImpl.getString(OracleResultSetImpl.java:355)
at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:1559)
/*
TABLE_CAT
TABLE_SCHEM
CHAR_OCTET_LENGTH
IS_NULLABLE
ORDINAL_POSITION
SQL_DATETIME_SUB
SQL_DATA_TYPE
ORDINAL_POSITION
// 조회를 할때 위에 필드가 COLUMN_DEF 보다 위에 있어서 나는 에러였다.
순서 때문에 에러가 발생 위에 필드들은 COLUMN_DEF 보다 뒤에 get 해야 된다. 그럼 문제 해결.
*/
ResultSetMetaData rsmd = null;
Connection conn = null;
ResultSet rs=null;
try {
conn = RDBConn.getConnection(dbAlias);
DatabaseMetaData dbmd = conn.getMetaData();
rs = dbmd.getColumns(null, null, tableNm, "%");
rsmd = rs.getMetaData();
int count = rsmd.getColumnCount();
String [] columns_key = new String[count];
for (int i = 1; i <= count; i++) {
columns_key[i - 1] = rsmd.getColumnName(i);
}
LinkedHashMap columns = null;
Reader input = null;
char[] buffer = null;
int byteRead=-1;
String key = "";
HashMap tc = null;
while (rs.next()) {
tc = new HashMap();
/* 어디에 있어서 상관없는 필드들.
NULLABLE
REMARKS
NUM_PREC_RADIX
DECIMAL_DIGITS
BUFFER_LENGTH
COLUMN_SIZE
TYPE_NAME
DATA_TYPE
COLUMN_NAME
TABLE_NAME
TABLE_SCHEM
TABLE_CAT
*/
tc.put("COLUMN_DEF", rs.getString("COLUMN_DEF"));
/*
TABLE_CAT
TABLE_SCHEM
CHAR_OCTET_LENGTH
IS_NULLABLE
ORDINAL_POSITION
SQL_DATETIME_SUB
SQL_DATA_TYPE
ORDINAL_POSITION
// 조회를 할때 위에 필드가 COLUMN_DEF 보다 위에 있어서 나는 에러였다.
순서 때문에 에러가 발생 위에 필드들은 COLUMN_DEF 보다 뒤에 get 해야 된다. 그럼 문제 해결.
*/
System.out.println(tc);
}
}catch (SQLException e1) {
e1.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}finally{
RDBConn.release(conn, null ,rs);
}