PostgreSql - > Altibase 데이터이관시.. Geometry 데이터 사이즈 문제.... 0 1 2,993

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 ]

 

도와주시면감사하겠습니다!

 

by 성회장 [2015.11.24 09:20:56]

제가알기로 알티베이스 geometry type reference를보니 char,varchar,byte type을 지원해준다고 나와있는데,

이상하게 텍스트는안들어가지네요..ㅠㅠ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입