`
ducaijun
  • 浏览: 155178 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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();
			}
		}
	}
}

 

分享到:
评论

相关推荐

    java中的@Value获取不到配置文件的值,也加载不到默认值

    自己开发一个工具类,为第三方应用提供调用接口,但是打包后测试过程中,发现了一个问题就是在用@Value获取配置文件内容的时候,无法获取我们的配置信息,也无法加载我们配置的默认值!具体配置如下: @Value("${...

    Thinking in java4(中文高清版)-java的'圣经'

    2.4.2 基本成员默认值 2.5 方法、参数和返回值 2.5.1 参数列表 2.6 构建一个Java程序 2.6.1 名字可见性 2.6.2 运用其他构件 2.6.3 static 关键字 2.7 你的第一个J ava程序 编译和运行 2.8 注释和嵌入式文档 2.8.1 ...

    Oracle9i的init.ora参数中文说明

    说明: 与 NLS_TIME_TZ_FORMAT 相似, 其中的一对值指定 TIMESTAMP 数据类型的默认值, 该类型除存储 YEAR, MONTH 和 DAY 日期值, HOUR, MINUTE 和 SECOND 时间值, 还存储 TIMEZONE_HOUR 和 TIMEZONE_MINUTE。...

    21天学通Oracle

    8.2.7 存储过程的参数——参数的默认值 152 8.2.8 存储过程的参数——参数顺序总结 153 8.3 程序包 153 8.3.1 规范 153 8.3.2 主体 155 8.3.3 调用程序包中的函数/存储过程 157 8.3.4 程序包中的变量 158 8.4...

    java编程练习题

    4,写一个类Fish,继承自Animal类,并提供一个构造方法,该构造方法需要一个参数name,并给legs赋默认值0;该类还要求覆盖Animal类中的无参move()方法,要求输出:XXX Swimming!! 5,写一个类Bird,继承自Animal类,并...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     9.6 通过Hibernate调用存储过程  9.7 小结  9.8 思考题 第10章 映射组成关系  10.1 建立精粒度对象模型  10.2 建立粗粒度关系数据模型  10.3 映射组成关系  10.3.1 区分值(Value)类型和实体(Entity)类型...

    Java开发技术大全 电子版

    3.5.2方法调用的参数123 3.5.3隐含参数this127 3.6构造方法128 3.6.1无参数构造方法的定义和使用129 3.6.2带参数构造方法的定义和使用131 3.6.3this关键字和构造方法的调用132 3.7静态方法133 3.7.1静态方法...

    java笔试题算法-watset-java:Watset聚类算法在Java中的实现

    java笔试题算法瓦塞特 这是(又名软聚类)算法的开源实现。 此实现是多线程的、可扩展的,包含多个单元测试,并且可以轻松嵌入到任何基于 ...这些参数的默认值分别为 STDIN 和 STDOUT。 此工具的输入是以 ABC 格式表

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     9.6 通过Hibernate调用存储过程  9.7 小结  9.8 思考题 第10章 映射组成关系  10.1 建立精粒度对象模型  10.2 建立粗粒度关系数据模型  10.3 映射组成关系  10.3.1 区分值(Value)类型和实体(Entity)类型...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     9.6 通过Hibernate调用存储过程  9.7 小结  9.8 思考题 第10章 映射组成关系  10.1 建立精粒度对象模型  10.2 建立粗粒度关系数据模型  10.3 映射组成关系  10.3.1 区分值(Value)类型和实体(Entity)类型...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     9.6 通过Hibernate调用存储过程  9.7 小结  9.8 思考题 第10章 映射组成关系  10.1 建立精粒度对象模型  10.2 建立粗粒度关系数据模型  10.3 映射组成关系  10.3.1 区分值(Value)类型和实体(Entity)类型...

    编程思想下篇

    3.4.1 方法调用中的别名问题 3.5 算术操作符 3.5.1 一元加、减操作符 3.6 自动递增和递减 3.7 关系操作符 3.7.1 测试对象的等价性 3.8 逻辑操作符 3.8.1 短路 3.9 直接常量 3.9.1 指数记数法 3.10 按位操作符 3.11 ...

    java红酒网站源码-Pentaho-Odoo:Pentaho-Odoo

    有许多公式可以增强参数调用功能,以提供巧妙和动态的默认值。 pentaho_report_scheduler "Pentaho Report Scheduler" "Pentaho Reports for Odoo "的附加组件,允许在 Odoo cron 进程中安排报告,并将结果发送给...

    java经典面试2010集锦100题(不看你后悔)

    C) 子类继承父类,如果父类中只有一个构造方法并且有参数,那么在子类的构造方法中必须先用super调用父类构造方法并传参。 D) 以上说法都不正确。 题目11:d 程序如下: class Test { private int day; public int...

    xheditor-1.1.14

    如果您希望样式表存储在系统自带的模板目录ui.css中,请将插件对象的样式名留空,则会自动按照插件名来调用相应的样式,例如:xhEdtBtnCut、xhEdtBtnCopy,其中的Cut和Copy是插件名 具体调用方法请参考演示文件夹中...

    java计算器程序.doc

    java 编写计算器的简单程序//一个较为简洁的巧妙的计算器程序, import java.io.*; import java.awt.event.*; import java.awt.*; //需要解决的问题,数学的运算都有正负号的出现,在点击等号的时候就会有冲突,...

    java线程池概念.txt

    workQueue:一个阻塞队列,用来存储等待执行的任务,这个参数的选择也很重要,会对线程池的运行过程产生重大影响,一般来说,这里的阻塞队列有以下几种选择   ArrayBlockingQueue;  LinkedBlockingQueue;  ...

    Toad 使用快速入门

    可以自定义存储过程得模板,在新建存储过程的时候,自动生成程序的框架可以方便的调用Schema Browser,把鼠标定位于某个对象上,F4,Schema Browser打开该对象的详细描述,帮助顺利快速开发程序。支持代码自动更正,...

    字符数组的存储方式 字符串常量池.docx

    字符串在java程序中被大量使用,为了避免每次都创建相同的字符串对象及内存分配,JVM内部对字符串对象的创建做了一定的优化,在Permanent Generation中专门有一块区域用来存储字符串常量池(一组指针指向Heap中的...

Global site tag (gtag.js) - Google Analytics