0

JDBC-ODBC ブリッジを使用して Access データベースを操作しています。特定のポリゴンと交差する 1 つのデータベースからすべてのポリゴンを選択し、別のデータベースの新しいテーブルに配置しようとしています。私はこのようなことをしたい:

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 ドライバーからの ResultSet は、http://www.hxtt.com/access/advanced.html#insertresultsetにあります。

于 2012-08-11T08:41:30.727 に答える