JDBC调用带输出参数的存储过程
2011-08-22 22:32
387 查看
前段时间项目中遇到存储过程分页的问题,因为分页的时候要统计分页数据的总数,在存储过程中想到了使用一个输出参数,但刚开是出现了点小问题
callableStatement.setString(1,"w");
callableStatement.registerOutParameter(2,java.sql.Types.INTEGER);
ResultSetrs=callableStatement.executeQuery();
intout=callableStatement.getInt(2);
while(rs.next()){
System.out.println(rs.getObject("PERSON_NAME"));
}
如果先调用intout=callableStatement.getInt(2);的话,结果集就会被关闭,并抛出
Exceptioninthread"main"com.microsoft.sqlserver.jdbc.SQLServerException:结果集已关闭。
atcom.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(UnknownSource)
atcom.microsoft.sqlserver.jdbc.SQLServerResultSet.checkClosed(UnknownSource)
atcom.microsoft.sqlserver.jdbc.SQLServerResultSet.next(UnknownSource)
atcom.mchange.v2.c3p0.impl.NewProxyResultSet.next(NewProxyResultSet.java:2859)
atxx.qq.app.AppTest.main(AppTest.java:24)
异常
改为
ResultSetrs=callableStatement.executeQuery();
while(rs.next()){
System.out.println(rs.getObject("PERSON_NAME"));
}
intout=callableStatement.getInt(2);
这样就OK了
附上简单的存储过程及源码
packagexx.qq.app;
importjava.sql.CallableStatement;
importjava.sql.Connection;
importjava.sql.ResultSet;
importorg.springframework.beans.factory.BeanFactory;
importorg.springframework.context.ApplicationContext;
importorg.springframework.context.support.ClassPathXmlApplicationContext;
importcom.mchange.v2.c3p0.ComboPooledDataSource;
/**
*@authorJackZhang
* Email:fish2-2@163.com
*@date2011-08-22
*/
publicclassAppTest{
publicstaticvoidmain(String[]args)throwsException{
ApplicationContextcontext=newClassPathXmlApplicationContext(
newString[]{"applicationContext.xml"});
BeanFactoryfactory=(BeanFactory)context;
ComboPooledDataSourcedataSource=(ComboPooledDataSource)factory
.getBean("dataSource");
Connectioncon=dataSource.getConnection();
CallableStatementcallableStatement=con
.prepareCall("{callGetBasics(?,?)}");
callableStatement.setString(1,"w");
callableStatement.registerOutParameter(2,java.sql.Types.INTEGER);
ResultSetrs=callableStatement.executeQuery();
while(rs.next()){
System.out.println(rs.getObject("PERSON_NAME"));
}
intout=callableStatement.getInt(2);
//intout=callableStatement.getInt(2);
System.out.println(out);
if(rs!=null)
rs.close();
if(callableStatement!=null)
callableStatement.close();
if(con!=null)
con.close();
}
}
/**
*
*QueryTemplatequeryTemplate=(QueryTemplate)factory.getBean("queryTemplate");//
*queryTemplate.query(newQuery(){//publicvoidexecuteQuery(Connectioncon,
*Statementst,ResultSetrs)throwsException{//Stringsql="SELECT*FROM
*P_BASIC";//rs=st.executeQuery(sql);//while(rs.next())//{//
*System.out.println(rs.getObject(5));//}//}//});
*
*/
存储过程
ALTERPROCEDUREGetBasics(
@PERSON_NAMEVARCHAR(32),
@COUNTINTOUT
)
AS
BEGIN
SELECT@COUNT=COUNT(*)FROMP_BASIC;
SELECT*FROMP_BASIC
END
GO
相关文章推荐
- jdbc调用无参数输出的存储过程
- jdbc调用有参数输出的存储过程
- Java调用Oracle集合类型输出参数的存储过程
- Java代码调用数据库带输出参数的存储过程
- 带输出参数的存储过程调用
- 带输出参数的存储过程的使用及在C#中调用问题
- C#调用存储过程带输出参数或返回值
- MyBatis之四:调用存储过程含分页、输入输出参数
- C#调用存储过程带输出参数或返回值
- java调用带输出参数的存储过程
- 关于存储过程的ADO调用的一些心得(输出参数,返回值)
- 存储过程调用存储过程且输出参数
- asp程序调用SQL Server的存储过程,获取不到输出参数的值
- 第48章、调用输入输出参数存储过程
- 调用存储过程丢失输出参数小数点后面的数值
- Oracle复合类型参数的存储过程以及JDBC调用
- C# 调用带有输出参数的分页存储过程
- 关于存储过程的ADO调用的一些心得(输出参数,返回值)
- Java调用Oracle集合类型输出参数的存储过程
- Java调用SQL存储过程 输入输出参数