如何在java中连接ResultSet对象?

时间:2014-03-13 02:46:37

标签: java oracle

我有两个联系。

Connection cone = ... // to DB2
Statement statement = cone.createStatement();
ResultSet resultSet1 = statement.executeQuery("select * from tableone");

Connection ctwo = ... // to Teradata
Statement statement = ctwo .createStatement();
ResultSet resultSet2 = statement.executeQuery("select * from tabletwo"); 

我如何加入这两张桌子?


到目前为止,我正在使用opencsv API将上述结果集写入csv。然后操纵两个csv文件。我确信我的方法远非理想,需要时间而且效率不高

必须有一个有效的解决方案。毕竟,两个结果集是java对象。必须有一种方法可以在没有第三方API的情况下加入它们

4 个答案:

答案 0 :(得分:2)

如果两个模式都是一致的,您可以为两个ResultSet的每一行创建相同的对象,并将它们全部放在一个List中。

例如,

List<T> results = new ArrayList<T>();
while(resultSet1.next()) {
    // retrieve fields here...
    results.add(new T(...fields...));
}

while(resultSet2.next()) {
    // retrieve fields here...
    results.add(new T(...fields...));
}

答案 1 :(得分:1)

您必须将Teradata中的结果加载到DB2中的临时表中,然后执行连接。

答案 2 :(得分:0)

如上所述在DB2中创建临时表可能不是最好的方法。仅仅是由于许可限制。问题清楚地问,如何连接两个结果集对象。

我相信Stackoveflow上有answer

while (rs1.next) {
    YourClass obj = new YourClass();
    obj.setSomeProperty(rs.getString(1));
    obj.setAnotherProperty(rs.getString(2));
    // etc..
    cominbedDataSet.add(obj);
}
祝你好运

答案 3 :(得分:0)

您可以使用JoinRowSet类。

// Data from one table
ResultSet someTable = con
         .createStatement()
         .executeQuery("SELECT id FROM some_table");

CachedRowSet someTableCached = new CachedRowSetImpl();
someTableCached.populate(someTable);

// Data from another table
ResultSet otherTable = con
         .createStatement()
         .executeQuery("SELECT id, man_id FROM other_table");

CachedRowSet otherTableCached = new CachedRowSetImpl();
otherTableCached.populate(someTable);


// Joining them
JoinRowSet jrs = new JoinRowSetImpl();
jrs.addRowSet(someTableCached, "id");
jrs.addRowSet(otherTableCached, "man_id");

更多详情:https://docs.oracle.com/javase/tutorial/jdbc/basics/joinrowset.html