使用Java谓词“SELECT INTO”

时间:2012-08-07 18:30:47

标签: java jdbc

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

2 个答案:

答案 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