zoukankan      html  css  js  c++  java
  • java调用存储过程

      在做java调用sqlserver存储过程时遇到了各种各样的问题,不过在不懈的努力之下这些问题还是得以解决了。今天总结一下遇到的问题以及解决的方法。

      首先调用存储过程的方法大家都很清楚:

    String sql="{call dbo.proc_getdata(?)}";//存储过程名以及参数,?为参数占位符。
    CallableStatement cstmt=connection.prepareCall(sql);
    cstmt.setInt(1, 1);
    
    ResultSet rs=cstmt.executeQuery();//返回结果集
        while(rs.next()){
              
        }

      如果这里的dbo.proc_getdata存储过程没有用到临时表或是表变量,获得想要的结果集没有任何问题。但是存储过程里如果用到了临时表或者是表变量,

    那么结果就有点出乎预料了。rs总是没有返回值。这是为什么呢?虽然直接也没有找到原因,但是找到了解决的办法。

         首先在存储过程的开始和结尾分别加上set nocount on和set nocount off。然后用到临时表的地方使用自动执行sql语句的方式:

    if (object_id('dbo.proc_getdata', 'P') is not null)
        drop proc dbo.proc_getdata
    go
    create proc dbo.proc_getdata (
        @No int --输入参数
    )
    as
    begin
        set nocount on
        
        IF EXISTS(SELECT * FROM TEMPDB..SYSOBJECTS WHERE ID = OBJECT_ID('TEMPDB..#Student')) 
        DROP TABLE #Student --临时表
        create TABLE #Student   (
        NOCD int NOT NULL ,
        Name nvarchar(32) NOT NULL ,
        PRIMARY KEY(NOCD)
        )
        
        declare @sql1 VARCHAR(8000)
         set @sql1=' '
         set @sql1='
          insert into #Student
          select * from students'
         exec(@sql1)
         set nocount off            
    end
  • 相关阅读:
    关于分布式系统中雷同集群技术及原理,你知道多少?
    如何在PHP中进行会话处理?
    PHP的isset()、is_null、empty()使用总结
    Mycatweb的介绍与搭建
    企业如何部署开源邮箱系统?
    企业如何选择合适的邮箱系统?
    Ansible原理与安装部署
    gRPC的简介与实例详解
    高效的性能测试工具-wrk
    轻松玩转windows之wamp开发环境部署
  • 原文地址:https://www.cnblogs.com/heyesp/p/4332191.html
Copyright © 2011-2022 走看看