易截截图软件、单文件、免安装、纯绿色、仅160KB

java调用存储过程无法取得返回参数

环境:数据库sql server2005,jdk1.6 ,myeclipse,驱动jdts1.2.2
执行以下代码,报错:
String querySQL = "{?=call p_sys_manager_csReport(?,?,?,?,?)}";
cstmt = conn.prepareCall(querySQL);
cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
cstmt.setInt(2, modType);
cstmt.setInt(3, dptId);
cstmt.setInt(4, eplId);
cstmt.registerOutParameter(5, java.sql.Types.VARCHAR);
cstmt.registerOutParameter(6, java.sql.Types.VARCHAR);
rs = cstmt.executeQuery();
if (rs != null) {
if (rs.next()) {
companyTotal = rs.getInt("companyTotal");
}
}
String temp = null;
temp = cstmt.getString(5);//此行报错

报错信息为:
java.sql.SQLException: Output parameters have not yet been processed. Call getMoreResults().
    at net.sourceforge.jtds.jdbc.ParamInfo.getOutValue(ParamInfo.java:159)
    at net.sourceforge.jtds.jdbc.JtdsCallableStatement.getOutputValue(JtdsCallableStatement.java:116)
    at net.sourceforge.jtds.jdbc.JtdsCallableStatement.getString(JtdsCallableStatement.java:310)
报错信息说得很明白,就是输出结果参数未处理,必须调用getMoreResults()方法以判断是否还有结果集。
然后修改代码,问题解决:
String querySQL = "{?=call p_sys_manager_csReport(?,?,?,?,?)}";
cstmt = conn.prepareCall(querySQL);
cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
cstmt.setInt(2, modType);
cstmt.setInt(3, dptId);
cstmt.setInt(4, eplId);
cstmt.registerOutParameter(5, java.sql.Types.VARCHAR);
cstmt.registerOutParameter(6, java.sql.Types.VARCHAR);
rs = cstmt.executeQuery();
if (rs != null) {
if(rs.next()) {
companyTotal = rs.getInt("companyTotal");
}
}
String temp = null;
/*
*记录集获取到后,把rs记录集循环取出后或者调用cstmt.getMoreResults()方法后,sqlserver才会处理output返回值
*/
if (!cstmt.getMoreResults()) {//此行判断是否还有更多的结果集,如果没有,接下来会处理output返回参数了
temp = cstmt.getString(5);//此行不再报错
}

其中改为以下代码也不报错:
if (rs != null) {


相关文档:

Java 简易计算器程序

    最近开始学习java,参考教科书写了一个简单的计算器程序,贴上来,以便有用的时候可以参考。
    呵呵,哈哈!!!
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import jav ......

使用JAVA和C#开发Ribbon界面

Ribbon 原来出现在 Microsoft Office 2007 的 Word、Excel 和 Powerpoint 組件中,后来也被运用到 Windows 7 的一些附加组件等其它软件中,如画图和写字板。它是一个收藏了命令按钮和图标的面板。它把命令组织成一组"标签",每一组包含了相关的命令。每一个应用程序都有一个不同的标签组,展示了程序所提供 ......

Java选择题

选择题
3阅读一下程序:
Boolean a=false;
Boolean b=true;
Boolean c=(a&b)&&(!b);
Int result=b==false?1:2;
这段程序执行完后,c与result的值是(D)。
A  c=false; result=1;  B. c=true;result=2;
C.c=true;result=1   D. c=false; result=2
 
6.下述声明中哪种可防 ......

Java Thread.interrupt 害人! 中断JAVA线程(zz)


程序是很简易的。然而,在编程人员面前,多线程呈现出了一组新的难题,如果没有被恰当的解决,将导致意外的行为以及细微的、难以发现的错误。
      在本篇文章中,我们针对这些难题之一:如何中断一个正在运行的线程。 
          & ......

activeMQ启动错误,引出的java endorsed目录问题。

在我机器上安装的是JDK6,下载activeMQ5.3启动时报错,提示jaxb包已经加载2.0版本无法加载2.1版本。
我通过网络搜索了一下发现,jaxb2.0是JDK发布时包含在rt.jar包中的。但是activeMQ5.3却需要2.1版本。这该如何处理?
总不能将rt.jar包解开,将jaxb2.1的类覆盖进去,再重新打包吧。这样太麻烦了。
再次进行网络搜索,发 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号