我有两个联系。
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的情况下加入它们
答案 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