繁体   English   中英

如何在java中从Web服务返回结果集

[英]How to return resultset from web service in java

我正在编写一个应用程序,我正在创建Web服务。 我正在创建一个操作(方法),它从结果集中的数据库表中检索数据库表值。 因此,我们无法直接在Web服务中返回结果集值。 我正在创建一个包含结果集值的类。 而不是结果集我返回新创建的类的对象[]如下:

 public HistoryInfoByUser[] get_HistoryInfoByUser(@WebParam(name = "email_Id")
  String email_Id) throws Exception{

        HistoryInfoByUser[] historyIn = null;
        if (conn != null) {
        CallableStatement cst = conn.prepareCall("{call sp_xxxx(?)}",ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
            cst.setString(1, email_Id);
            ResultSet resultSet = cst.executeQuery();
             int rowCount = resultSet.getRow();

           historyIn = new HistoryInfoByUser[rowCount];

          while (resultSet.next())
             {

                historyIn[rowCounter].setId(rowCounter);                               
           historyIn[rowCounter].setStartTime((java.util.Date)resultSet.getObject(1));
                historyIn[rowCounter].setType((String) resultSet.getObject(2));


             rowCounter++;
            }
        }
        return historyIn;
    }

但是在尝试访问Web服务客户端中的那些值时,它给出了java.lang.NullPointerException。

这是我在Web服务客户端中用于访问结果集值的代码:

    public void get_HistoryInfoByUser(String email_Id) 
{      
               service = new DBService();

               port = service.getDBPort();

    try {

        List<HistoryInfoByUser> historyIn = port.getHistoryInfoByUser(email_Id);
      Iterator iterator = historyIn.iterator();
            while (iterator.hasNext()){
              System.out.print(iterator.next()+" ");  
            }
      } catch (Exception_Exception ex) {
        Logger.getLogger(DataBaseWSHelper.class.getName()).log(Level.SEVERE, null, ex);
    }

 }

我尝试通过返回新创建的类的对象(HistoryInfoByUser)而不是object [](HistoryInfoByUser [])来返回单行值。 它对单个对象工作正常,但在使用object []时给出NullPointerException。 我没有任何方式可以帮助我克服访问结果集值的问题。

我提前感谢您提出的所有有价值的建议,这些建议将帮助我克服这个问题。

从Web服务返回WebRowSet

import javax.sql.rowset.WebRowSet;
import com.sun.rowset.WebRowSetImpl; // Reference implementation
...
// get ResultSet rs from db
WebRowSet wrs = new WebRowSetImpl();
wrs.populate(rs);
// return wrs from web service

请注意,JDBC提供程序可能提供特定于供应商的WebRowSet实现。 您可以使用它而不是参考实现。

你错过了一个

historyIn[rowCounter] = new HistoryInfoByUser();

在你的while循环的顶部。 创建数组时,只获得一个空指针数组。 因此,在您可以访问数组项之前,您需要创建它。

但是,如果这是你真正想做的事情,那么gpeche的答案可能是一个更好的主意。

您不应该从Web服务或任何其他Java对象返回ResultSet。

将数据加载到对象或数据结构中,并在创建它的同一范围内关闭ResultSet。

充其量,您的设计将使持久性层泄漏; 在最坏的情况下,你会有未封闭的游标。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM