2012-08-07 24 views
0

我正在使用JDBC-ODBC橋來處理Access數據庫。我試圖從一個與給定多邊形相交的數據庫中選擇所有多邊形,並將它們放入不同數據庫的新表中。我想要做這樣的事情:使用Java謂詞的「SELECT INTO」

SELECT * 
INTO Polygons IN targetDB 
FROM Polygons 
WHERE intersects(givenPolygon, Polygons.SHAPE) 

其中多邊形的多邊形與BLOB的(柱狀)代表的形狀,和相交()的表是謂詞我有在Java中讀取的BLOB到我自己多邊形類並決定這些形狀是否相交。多邊形表有一個我可以選擇的ID列。什麼是獲得同樣效果的有效方法?

編輯:它似乎JDBC-ODBC不支持SELECT INTO跨數據庫,因此需要另一個庫(我使用jackcess)。

回答

0

我結束了使用jackcess。我選擇使用JDBC的所有內容,然後使用jackcess過濾行,並在數據庫之間進行復制。

Polygon givenPolygon = getInputPolygon(); 

// open source and get data with JDBC 
Connection c = DriverManager.getConnection(src); 
Statement s = c.createStatement(); 
ResultSet results = s.executeQuery("SELECT * FROM " + table); 

// open dest and copy/filter with jackcess 
Database destDB = Database.open(dest); 
destDB.copyTable(table, results, new ImportFilter() { 
    @Override 
    public List<Column> filterColumns(List<Column> cols, 
             ResultSetMetaData metadata) 
    throws SQLException, IOException { 
     // get all columns 
     return cols; 
    } 

    @Override 
    public Object[] filterRow(Object[] row) throws SQLException, 
    IOException { 
     byte[] blob = row[1]; // or whatever your schema requires 
     Polygon p = new Polygon(blob); 
     if givenPolygon.intersects(p) 
      return row; 
     return null; 
    } 
});