У меня две связи.
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");
Как я могу присоединиться к этим двум таблицам?
до сих пор я пишу вышеупомянутые результирующие наборы в csv, используя opencsv API. А затем манипулируйте двумя файлами csv. Я уверен, что мой подход далек от идеала, требуется время и неэффективность
Должно быть эффективное решение. В конце концов, два набора результатов - это java-объекты. Должен быть способ присоединиться к ним без стороннего API
Создание временной таблицы в DB2, как было упомянуто, может быть не лучшим образом. Просто из-за ограничений разрешений. В вопросе четко спрашивается, как объединить два объекта набора результатов.
Я считаю, что был ответ на Stackoveflow
while (rs1.next) {
YourClass obj = new YourClass();
obj.setSomeProperty(rs.getString(1));
obj.setAnotherProperty(rs.getString(2));
// etc..
cominbedDataSet.add(obj);
}
удачи
Если обе схемы согласованы, вы можете создать один и тот же объект для каждой строки как 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...));
}
Вы должны загрузить свои результаты из Teradata в временную таблицу в DB2 и выполнить соединение после.
Существует класс 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