JDBC更新计数行及调用存储过程返回多个结果集详解

JDBC更新计数行调用存储过程返回多个结果集是本文我们主要要介绍的内容,在开始本文的时候,我们先了解SQL Server中的一个命令:SET NOCOUNT ON;执行该命令,表示不返回计数行,什么是计数行了,比如我们执行DELETE ,UPDATE,INSERT的时候,对多少条数据进行了修改,计数行的值就是多少?

  1. SET NOCOUNT ON added to prevent extra result sets from  
  2. interfering with SELECT statements. 

 

在JDBC的操作数据库的过程中,你可以把Statement理解成为指向ResultSet的指针,如果数据库允许返回记数行的话,Statement将指向该计数行,比如

 

  1. SET NOCOUNT ON;    
  2. update TABLEA SET A='aa';--假设共100条数据被修改     
  3. SELECT * FROM TABLEA;  

 

调用callableStatement.execute();后callableStatement指向受影响的计数行,当你再调用rs = callableStatement.getResultSet();  的时候,结果集rs 为空。 无法查询出表TABLEA 的数据Statement提供了一个getMoreResults()的方法,该方法能将当前Statement “指针” 移动到下一个结果集。如果callableStatement.getUpdateCount()==-1&&getMoreResults()==true的话表明当前statement对象正指向一个真正的结果集。

For Examle:

 

  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 Email:[email protected]   
  11. * @date 2011-08-22   
  12. */    
  13. public class AppTest {    
  14. public static void main(String[] args) throws Exception {    
  15. ApplicationContext context = new ClassPathXmlApplicationContext(    
  16. new String[] { "applicationContext.xml" });    
  17. BeanFactory factory = (BeanFactory) context;    
  18. ComboPooledDataSource dataSource = (ComboPooledDataSource) factory    
  19. .getBean("dataSource");    
  20. Connection con = dataSource.getConnection();    
  21. CallableStatement callableStatement = con    
  22. .prepareCall("{call GetBasics(?,?)}");    
  23. callableStatement.setString(1, "w");    
  24. callableStatement.registerOutParameter(2, java.sql.Types.INTEGER);    
  25. ResultSet rs=null;    
  26. // 是否有结果集返回     
  27. boolean hasResultSet = callableStatement.execute();    
  28. // callableStatement--------->update     
  29. System.out.println("执行存储过程后Statement是否指向真正的结果集:"+hasResultSet);    
  30. System.out.println("受影响的行数:"+callableStatement.getUpdateCount());    
  31. callableStatement.getMoreResults();//------->select     
  32. rs = callableStatement.getResultSet();    
  33. System.out.println("受影响的行:"+callableStatement.getUpdateCount());    
  34. while (rs.next()) {    
  35. //System.out.println(rs.getObject(1));     
  36. }    
  37. callableStatement.getMoreResults();//-------->update     
  38. System.out.println("受影响的行:"+callableStatement.getUpdateCount());    
  39. callableStatement.getMoreResults();//-------->update     
  40. System.out.println("受影响的行:"+callableStatement.getUpdateCount());    
  41. callableStatement.getMoreResults();//-------->select     
  42. System.out.println("受影响的行:"+callableStatement.getUpdateCount());    
  43. rs = callableStatement.getResultSet();// 获取到真实的结果集     
  44. while (rs.next()) {    
  45. //System.out.println(rs.getObject(1));     
  46. }    
  47. callableStatement.getMoreResults();//--------->update     
  48. System.out.println("受影响的行:"+callableStatement.getUpdateCount());    
  49. if (rs != null)    
  50. rs.close();    
  51. if (callableStatement != null)    
  52. callableStatement.close();    
  53. if (con != null)    
  54. con.close();    
  55. }    
  56. }  

 

输出:

执行存储过程后是否返回结果集:false  

  1. 受影响的行数:262  
  2. 受影响的行:-1 ,此处返回结果集  
  3. 受影响的行:262  
  4. 受影响的行:262  
  5. 受影响的行:-1,此处返回结果集  
  6. 受影响的行:262  

存储过程

 

  1. ALTER PROCEDURE GetBasics(    
  2. @PERSON_NAME VARCHAR(32),    
  3. @COUNT INT OUT    
  4. )    
  5. AS    
  6. BEGIN    
  7. SET NOCOUNT ON;    
  8. update TABLE_A SET NAME='aa';    
  9. SELECT @COUNTCOUNT = COUNT(*) FROM TABLE_A;    
  10. update TABLE_A SET NAME='aa';    
  11. SELECT * FROM TABLE_A;    
  12. update TABLE_A SET NAME='aa';    
  13. update TABLE_A SET NAME='aa';    
  14. SELECT * FROM ORGS;    
  15. update TABLE_A SET NAME='aa';    
  16. END    
  17. GO   

 

以上就是JDBC更新计数行及调用存储过程返回多个结果集的过程的详细解释及实例说明,本文就介绍到这里了,希望本次的介绍能够对您有所收获!

【编辑推荐】

  1. Oracle 11g数据库审计功能应用实例解析
  2. SQL Server数据库复制失败的原因及解决方案
  3. SQL Server 2005数据库游标调用函数实例解析
  4. SQL Server数据库中FOR XML AUTO的使用详解
  5. SQL Server数据库用视图来处理复杂的数据查询关系

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

(0)
管理的头像管理
上一篇2025-05-21 19:48
下一篇 2025-05-21 19:49

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

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