我正在使用JDBC-ODBC桥来处理Access数据库。我试图从一个数据库中选择与给定多边形相交的所有多边形,并将它们放在另一个数据库中的新表中。我想做这样的事情:
SELECT *
INTO Polygons IN targetDB
FROM Polygons
WHERE intersects(givenPolygon, Polygons.SHAPE)
其中Polygons是一个多边形表,其中BLOB(列SHAPE)表示形状,而intersects()是我在Java中的谓词,它将BLOB读入我自己的Polygon类并决定形状是否相交。 Polygon表有一个我可以选择的ID列。获得同样效果的有效方法是什么?
编辑:看来JDBC-ODBC不支持跨数据库的SELECT INTO,需要另一个库(我使用了jackcess)。
答案 0 :(得分: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;
}
});
答案 1 :(得分:0)
批量插入来自任何JDBC驱动程序的ResultSet位于http://www.hxtt.com/access/advanced.html#insertresultset