? ? 今天碰到一个问题,就是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(); } } } }
?