0

我正在使用 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)。

4

2 回答 2

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;
    }
});
于 2012-08-07T23:36:37.103 回答
0

来自任何 JDBC 驱动程序的批量插入结果集位于http://www.hxtt.com/access/advanced.html#insertresultset

于 2012-08-11T08:41:30.727 回答