如何在java中合并来自两个不同数据库的两个不同结果集

Posted

技术标签:

【中文标题】如何在java中合并来自两个不同数据库的两个不同结果集【英文标题】:how to merge two different resultsets from two different DBs in java 【发布时间】:2014-12-22 11:42:43 【问题描述】:

我有两个结果集,一个来自 DB2,一个来自 Sybase。 我想根据某些条件合并这些结果集,为此我创建了一个函数,它将获取两个结果集并合并它们。

但我收到 SQL 异常 - Resultset Closed

我正在使用 Connection 对象和 Prepared 语句连接到相应的数据库并执行查询。

public void ExecuteDB2Query(SQLQuery)
Connection DB2con = DB2Sess.connection();
PreparedStatement statement = DB2con.prepareStatement(SQLQuery);
MyResulset1= statement.executeQuery();

另一种方法:

public void ExecuteSybaseQuery(SQLQuery)
Connection Sybasecon = SybaseSess.connection();
PreparedStatement statement = Sybasecon.prepareStatement(SQLQuery);
MyResulset2= statement.executeQuery();

最终合并方法

puble void merge
while(MyResultset1.next())
while(MyResultset2.next())
<some code here>

我们有什么方法可以遍历这两个结果集吗?无一例外。

【问题讨论】:

使您的连接可滚动并在每次迭代时重置为第一个结果集 2。 如何使我的连接可滚动? prepareStatement(SQLQuery,ResultSet.TYPE_SCROLL_INSENSITIVE);和 Sybasecon.prepareStatement(SQLQuery,ResultSet.TYPE_SCROLL_INSENSITIVE);它允许您在结果集函数调用时向前和向后移动以及将光标移动到第一个或最后一个。 很抱歉,我没明白你的意思。 你能告诉我我上面在我的代码中给出的内容吗?像:- public void ExecuteSybaseQuery(SQLQuery) Connection Sybasecon = SybaseSess.connection(); PreparedStatement 语句 = Sybasecon.prepareStatement(SQLQuery); MyResulset2= statement.executeQuery(); 在这个方法中我必须做出改变吗? 【参考方案1】:

看起来您正在尝试使用嵌套循环遍历这两个结果集。那不能这样做,因为在内部循环完成第一次迭代后,MyResultset2 不能再使用了。

我建议您分别迭代这两个结果集并将它们的数据存储在一些集合中。然后,您可以随意迭代这些集合。

【讨论】:

【参考方案2】:

好的,我会给你你的代码检查一下。

public void ExecuteDB2Query(SQLQuery)
  Connection DB2con = DB2Sess.connection();
  PreparedStatement statement = DB2con.prepareStatement(SQLQuery,ResultSet.TYPE_SCROLL_INSENSITIVE);
  myResulset1 = statement.executeQuery();



public void ExecuteSybaseQuery(SQLQuery)
  Connection Sybasecon = SybaseSess.connection();
  PreparedStatement statement = Sybasecon.prepareStatement(SQLQuery,ResultSet.TYPE_SCROLL_INSENSITIVE);
  myResulset2 = statement.executeQuery();


public void merge
  while(myResultset1.next())
    myResultset2.first();
    while(myResultset2.next())
      <some code here>
    
  

根据您的要求对此代码进行更改。

【讨论】:

也检查这个问题***.com/questions/22368107/… 我在这方面遇到了异常 您遇到了什么异常? com.ibm.db2.jcc.c.SqlException:无效参数:语句自动生成的键值 1004 无效。在 com.ibm.db2.jcc.c.p.a(p.java:3851) 在 com.ibm.db2.jcc.c.p.a(p.java:2118) 在 com.ibm.db2.jcc.c.p.prepareStatement(p.java:第2194章) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method .java:618) at org.hibernate.jdbc.BorrowedConnectionProxy.invoke(BorrowedConnectionProxy.java:50) at $Proxy6.prepareStatement(Unknown Source) `

以上是关于如何在java中合并来自两个不同数据库的两个不同结果集的主要内容,如果未能解决你的问题,请参考以下文章

在 WCF/WIF 中,如何合并来自两个不同客户端的自定义 sts 令牌的声明

Java - 合并来自不同数据源中的 2 个表的数据

如何合并来自不同数据库的数据?

如何在不合并索引的情况下连接具有不同多索引的两个数据帧?

尝试合并来自两个不同表的两个选择时出现错误

如何比较来自两个不同分支的文件