首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

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

2013-10-15 
Java调用存储过程参数默认值问题? ? 今天碰到一个问题,就是java调用存储过程,但是存储过程有几个参数是有

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) outputASBEGINselect @result=@aaa+@bbb+@cccEND

?

?

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

?

我现在想只传入@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();}}}}

?

热点排行