Java调用存储过程参数默认值问题

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

 

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

 

Create PROCEDURE [dbo].[proc_defult_value] 
@aaa varchar(20)='aaa,',
@bbb varchar(20)='bbb,',
@ccc varchar(20)='End',
@result varchar(2000) output
AS
BEGIN
	select @result=@aaa+@bbb+@ccc
END

 

 

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

 

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

 

首先写测试代码,如下:

 

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Types;

public class TestProcedure {
	public static void main(String[] args) {
		Connection conn = null;
		CallableStatement cs = null;
		try {
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			conn = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1;DatabaseName=DBname", "sa", "sa");
			cs = conn.prepareCall("{CALL proc_defult_value(?,?,?,?)}");
			cs.setString("aaa", "aa,");
			cs.setString("bbb", "bb,");
			cs.setString("ccc", "cc");
			cs.registerOutParameter("result", Types.VARCHAR);
			cs.execute();
			System.out.println(cs.getString("result"));
			cs.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (cs != null)
					cs.close();
				if (conn != null)
					conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

 

这块要注意一下,因为我用的是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,且给占位符设置值得时候不能再用参数名了,只能用数字。

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Types;

public class TestProcedure {
	public static void main(String[] args) {
		Connection conn = null;
		CallableStatement cs = null;
		try {
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			conn = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1;DatabaseName=DBname", "sa", "sa");
			cs = conn.prepareCall("{CALL proc_defult_value(?,?,default,?)}");
			cs.setString(1, "aa,");
			cs.setString(2, "bb,");
			//cs.setString("ccc", "cc");
			cs.registerOutParameter(3, Types.VARCHAR);
			cs.execute();
			System.out.println(cs.getString(3));
			cs.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (cs != null)
					cs.close();
				if (conn != null)
					conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值