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
  • 相关阅读:
    【xinsir】githook之precommit分享
    node进程一些信号的意义
    ES6篇
    Webpack4篇
    Node篇
    Vuex篇
    WebStorage篇
    HTML5篇
    html5语义化标签大全
    emmet语法
  • 原文地址:https://www.cnblogs.com/heyesp/p/4332191.html
Copyright © 2011-2022 走看看