egrator
每个为支持 DB2 Information Integrator 所写的 servlet 只需要一种方法来执行其 支持的任一查询。(根据我们的项目的性质,我们在一个 servlet 中实现查询 1 到 3, 并在另一个 servlet 中实现查询 4 和 5。我们还有两个 servlet 来实现直接数据访问: 一个支持查询 1 到 3,另一个则支持查询 4 和 5)。用户输入使我们的 servlet 能够确 定要执行它所支持的哪个查询。
当对我们的查询语句对象应用了参数标记后,我们执行了语句并返回结果:
stmt[choice].execute();
return outputResult(choice);
对于我们的两个 DB2 Information Integrator servlet 中的 executeQuery() 方法来 说,此代码是完全相同的。
使用直接数据访问
对每个查询使用不同的方法,为直接访问每个数据源所写的 servlet 是最容易实现的 。这是因为每个查询所返回的中间结果集都是不同的,这些结果需要插入到辅助表中来进 行进一步处理。
当对我们的查询语句对象应用了参数标记后,我们写了如下代码来执行查询 1:
ResultSet rs = null;
int rows = 0;
...
// fetch the data from each data source and insert it into temp table
for(int i = 1; i < dbname.length; i++) {
fetch1[i].execute();
rs = fetch1[i].getResultSet();
rows = 0;
while (rs.next()) {
insert[1].setInt(1, new Double(rs.getString("p_partkey")).intValue ());
insert[1].setString(2, rs.getString("p_name"));
insert[1].setString(3, rs.getString("p_mfgr"));
insert[1].setString(4, rs.getString("p_type"));
insert[1].executeUpdate();
rows++;
}
System.out.println("> " + rows + " rows inserted from " + dbname [i]);
}
if (rs != null) { rs.close(); }
return outputResult(1);
跨多个数据源的J2EE开发: 细节探讨(12)
时间:2011-04-11 IBM C. M. Saracco
执行查询 2 和 3 的逻辑与之非常相似,因此我们不在这里重复了。查询 4 和 5 的性 质有很大不同,并且查询 5 肯定是所有查询中最困难的。为了使您了解我们需要进行什么 样的编码,以下是对执行查询 5 的 servlet 方法的节选。同样地,我们已经除去了读取 用户的输入参数并设置这些值的代码。
// code for query #5 execution
private String executeQuery3(HttpServletRequest req)
throws SQLException,
ParseException {
ResultSet rs = null;
int rows = 0;
// read the parameters
...
// insert from DB2
q3db2fetch.execute();
rs = q3db2fetch.getResultSet();
while (rs.next() ) {
Q3insertfromdb2.setInt(1,new
Double(rs.getString("c_custkey")).intValue());
q3insertfromdb2.setString(2, rs.getString("c_name"));
q3insertfromdb2.setDouble(3, new
Double(rs.getString("c_acctbal")).doubleValue());
q3insertfromdb2.setDouble(4, new
Double(rs.getString("total_order")).doubleValue());
q3insertfromdb2.setInt(5, new
Double(rs.getString("num_order")).intValue());
q3insertfromdb2.executeUpdate();
rows++;
}
System.out.println("rows inserted from db2: " + rows);
// for each c_custkey from temp table, select/update
from ora/odbc
q3tempfetch.execute();
rs = q3tempfetch.get
|