【问题标题】:how to merge two different resultsets from two different DBs in java如何在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(); } 在这个方法中我必须做出改变吗?

标签: java mysql jdbc resultset


【解决方案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.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) `
    猜你喜欢
    • 1970-01-01
    • 2013-07-30
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 2023-03-18
    相关资源
    最近更新 更多