JDBC调用带输出参数的存储过程的实例解析

在用JDBC调用存储过程来实现分页的时候,因为要统计分页数据的总数,在存储过程中想到了使用一个输出参数来完成这样的功能,于是就用JDBC调用带输出参数的存储过程来实现这一功能。刚开始还出了点问题,如下:

 

  1. callableStatement.setString(1, "w");    
  2. callableStatement.registerOutParameter(2, java.sql.Types.INTEGER);    
  3. ResultSet rs = callableStatement.executeQuery();    
  4. int out = callableStatement.getInt(2);    
  5. while (rs.next()) {    
  6. System.out.println(rs.getObject("PERSON_NAME"));    
  7. }   

 

如果先调用 int out = callableStatement.getInt(2);的话,结果集就会被关闭,并抛出

 

  1. Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: 结果集已关闭。  
  2. at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)    
  3. at com.microsoft.sqlserver.jdbc.SQLServerResultSet.checkClosed(Unknown Source)    
  4. at com.microsoft.sqlserver.jdbc.SQLServerResultSet.next(Unknown Source)    
  5. at com.mchange.v2.c3p0.impl.NewProxyResultSet.next(NewProxyResultSet.java:2859)    
  6. at xx.qq.app.AppTest.main(AppTest.java:24)   

 

就出现了上面的异常现象。

解决方法是将其改为:

 

  1. ResultSet rs = callableStatement.executeQuery();    
  2. while (rs.next()) {    
  3. System.out.println(rs.getObject("PERSON_NAME"));    
  4. }    
  5. int out = callableStatement.getInt(2);   

 

这样就OK了。

附上简单的存储过程及源码:

 

  1. package xx.qq.app;    
  2. import java.sql.CallableStatement;    
  3. import java.sql.Connection;    
  4. import java.sql.ResultSet;    
  5. import org.springframework.beans.factory.BeanFactory;    
  6. import org.springframework.context.ApplicationContext;    
  7. import org.springframework.context.support.ClassPathXmlApplicationContext;    
  8. import com.mchange.v2.c3p0.ComboPooledDataSource;    
  9. /**   
  10. * @author Jack Zhang    
  11. *         Email:[email protected]   
  12. * @date 2011-08-22   
  13. */    
  14. public class AppTest {    
  15. public static void main(String[] args) throws Exception {    
  16. ApplicationContext context = new ClassPathXmlApplicationContext(    
  17. new String[] { "applicationContext.xml" });    
  18. BeanFactory factory = (BeanFactory) context;    
  19. ComboPooledDataSource dataSource = (ComboPooledDataSource) factory    
  20. .getBean("dataSource");    
  21. Connection con = dataSource.getConnection();    
  22. CallableStatement callableStatement = con    
  23. .prepareCall("{call GetBasics(?,?)}");    
  24. callableStatement.setString(1, "w");    
  25. callableStatement.registerOutParameter(2, java.sql.Types.INTEGER);    
  26. ResultSet rs = callableStatement.executeQuery();    
  27. while (rs.next()) {    
  28. System.out.println(rs.getObject("PERSON_NAME"));    
  29. }    
  30. int out = callableStatement.getInt(2);    
  31. //int out = callableStatement.getInt(2);     
  32. System.out.println(out);    
  33. if (rs != null)    
  34. rs.close();    
  35. if (callableStatement != null)    
  36. callableStatement.close();    
  37. if (con != null)    
  38. con.close();    
  39. }    
  40. }    
  41. /**   
  42. *    
  43. * QueryTemplate queryTemplate =(QueryTemplate)factory.getBean("queryTemplate"); //   
  44. * queryTemplate.query(new Query(){ // public void executeQuery(Connection con,   
  45. * Statement st, ResultSet rs) throws Exception { // String sql ="SELECT * FROM   
  46. * P_BASIC"; // rs = st.executeQuery(sql); // while(rs.next()) // { //   
  47. * System.out.println(rs.getObject(5)); // } // } // });   
  48. *    
  49. */   

 

存储过程

 

  1. ALTER PROCEDURE GetBasics(    
  2. @PERSON_NAME VARCHAR(32),    
  3. @COUNT INT OUT    
  4. )    
  5. AS    
  6. BEGIN    
  7. SELECT @COUNTCOUNT = COUNT(*) FROM P_BASIC;    
  8. SELECT * FROM P_BASIC    
  9. END    
  10. GO   

 

以上就是JDBC调用带输出参数的存储过程来完成分页并统计分页总数的全部过程,本文就介绍到这里了,希望本次的介绍能够对您有所收获!

【编辑推荐】

  1. Oracle 11g数据库使用XML Table的BUG解决
  2. SQL Server 2005数据库游标调用函数实例解析
  3. SQL Server数据库中FOR XML AUTO的使用详解
  4. SQL Server数据库用视图来处理复杂的数据查询关系
  5. SQL Server,Oracle,DB2上创建表和修改表对比与总结

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/273857.html<

(0)
运维的头像运维
上一篇2025-05-09 11:22
下一篇 2025-05-09 11:24

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注