by 성회장 [ALTIBASE] 알티베이스 PostgreSQL 데이터이관 알티베이스공간정보크기 [2015.11.24 09:17:23]
안녕하세요 질문있는 신입개발자입니다..ㅎ
PostgreSQL 에서 Altibase로 테이블하나 옮겨보는중인데요....ㅎ
다른 데이터들은 다 들어가나, Geometry데이터가 문제인듯싶습니다..
일단 밑에 소스와 에러 적어두었습니다!
제가 판단한원인은
Altibase로 이관시 geometry데이터가 byte타입으로 들어가더군요 (이것도 제추측입니다...)
그래서 바이트로 넣어주는데
알티베이스에서 바이트는 32000까지 지원해주는데 그 크기를넘을시 에러가나오는것 같습니다..
하루종일 삽질해봐도 해결이안되네요 ㅠㅠ
도와주세요!! ㅠㅠ
일단 해결방법과 알티베이스에서 지원하는 Geometrydata가 바이트타입으로만 넣어줘야되는지 궁금합니다.!!(어떤 타입을지원해주는지...)
System.out.println("PostgreSQL ------> Altibase Process Start!!");
DBManager manager = null;
Connection con = null;
Connection con1 = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
manager = DBManager.getInstance();
String postgreSelectQuery = "SELECT HJD_ID, EMD_CODE, EMD_ENG_NM, EMD_KOR_NM, ST_ASBINARY(GEOM) AS GEOM FROM HJD_EMD";
String altibaseInsertQuery = "INSERT INTO HJD_EMD (HJD_ID, EMD_CODE, EMD_ENG_NM, EMD_KOR_NM, GEOM) VALUES(?,?,?,?,GEOMFROMTEXT(?))";
try {
con = manager.getConnection(PG_DB);
pstmt = con.prepareStatement(postgreSelectQuery);
rs = pstmt.executeQuery();
int hjd_id;
String emd_code, emd_eng_nm, emd_kor_nm, wktGeom;
byte[] geom;
int count = 1;
WKBReader reader = new WKBReader();
WKTWriter write = new WKTWriter();
con1 = manager.getConnection(ALTI_DB);
while(rs.next()) {
hjd_id = rs.getInt("hjd_id");
emd_code = rs.getString("emd_code");
emd_eng_nm = rs.getString("emd_eng_nm");
emd_kor_nm = rs.getString("emd_kor_nm");
geom = rs.getBytes("geom");
wktGeom = write.write(reader.read(geom));
System.out.println("hid_id : " + hjd_id);
System.out.println("emd_code : " + emd_code);
System.out.println("emd_eng_nm : " + emd_eng_nm);
System.out.println("emd_kor_nm : " + emd_kor_nm);
System.out.println("geom : " + wktGeom);
//Connection con1 = manager.getConnection(ALTI_DB);
pstmt = con1.prepareStatement(altibaseInsertQuery);
pstmt.setInt(1, hjd_id);
pstmt.setString(2, emd_code);
pstmt.setString(3, emd_eng_nm);
pstmt.setString(4, emd_kor_nm);
pstmt.setString(5, wktGeom);
pstmt.executeUpdate();
System.out.println("PostgreSQL ------> Altibase Process Success!!");
System.out.println("현재 데이터 개수 : " + count);
count++;
}
}catch(Exception e) {
e.printStackTrace();
} finally {
try { if(rs != null) rs.close(); } catch(Exception e) {}
try { if(pstmt != null) pstmt.close(); } catch(Exception e) {}
try { if(con != null) con.close(); } catch(Exception e) {}
try { if(con1 != null) con1.close(); } catch(Exception e) {}
}
}
에러입니다.
java.sql.SQLException: Invalid size of data to bind to a host variable [ Param ID = 4, Data Type = MTD_VARCHAR, Data Size = 44898, Declared Size of Host Variable = 32002 ]
도와주시면감사하겠습니다!