zoukankan      html  css  js  c++  java
  • 调用存储过程参数默认值问题

        今天碰到一个问题,就是java调用存储过程,但是存储过程有几个参数是有默认值的,而正好我这块是不需要给那些默认值赋值。

    我先把测试的存储过程贴出来,用的是sql server 2005:

    Sql代码  收藏代码
    1. Create PROCEDURE [dbo].[proc_defult_value]   
    2. @aaa varchar(20)='aaa,',  
    3. @bbb varchar(20)='bbb,',  
    4. @ccc varchar(20)='End',  
    5. @result varchar(2000) output  
    6. AS  
    7. BEGIN  
    8.     select @result=@aaa+@bbb+@ccc  
    9. END  

    存储过程很简单,前三个参数都有默认值,第四个参数是返回前三个字符串连接的串。

    我现在想只传入@aaa和@bbb的值,@ccc的值用默认的值。

    首先写测试代码,如下:

    Java代码  收藏代码
    1. import java.sql.CallableStatement;  
    2. import java.sql.Connection;  
    3. import java.sql.DriverManager;  
    4. import java.sql.Types;  
    5.   
    6. public class TestProcedure {  
    7.     public static void main(String[] args) {  
    8.         Connection conn = null;  
    9.         CallableStatement cs = null;  
    10.         try {  
    11.             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");  
    12.             conn = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1;DatabaseName=DBname", "sa", "sa");  
    13.             cs = conn.prepareCall("{CALL proc_defult_value(?,?,?,?)}");  
    14.             cs.setString("aaa", "aa,");  
    15.             cs.setString("bbb", "bb,");  
    16.             cs.setString("ccc", "cc");  
    17.             cs.registerOutParameter("result", Types.VARCHAR);  
    18.             cs.execute();  
    19.             System.out.println(cs.getString("result"));  
    20.             cs.close();  
    21.         } catch (Exception e) {  
    22.             e.printStackTrace();  
    23.         } finally {  
    24.             try {  
    25.                 if (cs != null)  
    26.                     cs.close();  
    27.                 if (conn != null)  
    28.                     conn.close();  
    29.             } catch (Exception e) {  
    30.                 e.printStackTrace();  
    31.             }  
    32.         }  
    33.     }  
    34. }  

    这块要注意一下,因为我用的是sql server 2005 Class.forName如下:

    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

    如果你用的是sql server 2000的话 Class.forName如下:

    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

    执行结果是:aa,bb,cc, 

    与预期的一致,

    现在我打算只传入@aaa和@bbb这两个值,经过几次测试才知道需要用default,且给占位符设置值得时候不能再用参数名了,只能用数字。

    Java代码  收藏代码
    1. import java.sql.CallableStatement;  
    2. import java.sql.Connection;  
    3. import java.sql.DriverManager;  
    4. import java.sql.Types;  
    5.   
    6. public class TestProcedure {  
    7.     public static void main(String[] args) {  
    8.         Connection conn = null;  
    9.         CallableStatement cs = null;  
    10.         try {  
    11.             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");  
    12.             conn = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1;DatabaseName=DBname", "sa", "sa");  
    13.             cs = conn.prepareCall("{CALL proc_defult_value(?,?,default,?)}");  
    14.             cs.setString(1, "aa,");  
    15.             cs.setString(2, "bb,");  
    16.             //cs.setString("ccc", "cc");  
    17.             cs.registerOutParameter(3, Types.VARCHAR);  
    18.             cs.execute();  
    19.             System.out.println(cs.getString(3));  
    20.             cs.close();  
    21.         } catch (Exception e) {  
    22.             e.printStackTrace();  
    23.         } finally {  
    24.             try {  
    25.                 if (cs != null)  
    26.                     cs.close();  
    27.                 if (conn != null)  
    28.                     conn.close();  
    29.             } catch (Exception e) {  
    30.                 e.printStackTrace();  
    31.             }  
    32.         }  
    33.     }  
    34. }  
  • 相关阅读:
    jQuery的优点——(一)
    js学习之函数表达式及闭包
    js的面向对象的程序设计之理解继承
    js之引用类型
    js的基本概念详解
    有关js的变量、作用域和内存问题
    js和HTML结合(补充知识:如何防止文件缓存的js代码)
    富豪凯匹配串
    2018 ccpc final
    蒟蒻的个人第一篇博客
  • 原文地址:https://www.cnblogs.com/xzcBY/p/8662133.html
Copyright © 2011-2022 走看看