ibatis与存储过程(带输出参数的存储过程)升级版v1.1
2008-08-26 10:35
435 查看
初始版:http://blog.csdn.net/fy_kenny/archive/2008/04/30/2350586.aspx
全部是针对Microsoft SQL Server 2000的Stored Procedure的例子:
参照《iBATIS in Action》书写:1. max_in_example<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Stored Procedure:a.
CREATE PROCEDURE [dbo].[max_in_example] @a INTEGER = 0 OUTPUT, @b INTEGER = 0 OUTPUT, @c INTEGER = 0 OUTPUT AS BEGIN IF (@a > @b) SET @c = @a ELSE SET @c = @b RETURN @c END GO |
b.
CREATE FUNCTION max_in_example ( @a INT, @b INT ) RETURNS INT AS BEGIN DECLARE @c INT IF(@a > @b) SET @c = @a ELSE SET @c = @b RETURN @c END |
SqlMap:
<parameterMap id="pm_in_example" class="java.util.Map"> <parameter property="c" javaType="int" jdbcType="INTEGER" mode="OUT" /> <parameter property="a" javaType="int" jdbcType="INTEGER" /> <parameter property="b" javaType="int" jdbcType="INTEGER" /> </parameterMap> <procedure id="in_example" parameterMap="pm_in_example" resultClass="int"> { ? = call max_in_example(?, ?) } </procedure> |
Java Code:
public static Integer getMax_in_example(int a, int b) throws SQLException { Map<String, Integer> m = new HashMap<String, Integer>(2); m.put("a", new Integer(a)); m.put("b", new Integer(b)); m.put("c", new Integer(0)); //执行存储过程in_example sqlMapper.queryForObject("in_example", m); return m.get("c"); } |
2. swap
Stored Procedure:CREATE PROCEDURE [dbo].[swap] @a INTEGER OUTPUT, @b INTEGER OUTPUT AS BEGIN DECLARE @temp INTEGER SET @temp = @a SET @a = @b SET @b = @temp END GO |
SqlMap:
<parameterMap id="swapProcedureMap" class="java.util.Map"> <parameter property="a" javaType="int" jdbcType="INTEGER" mode="INOUT" /> <parameter property="b" javaType="int" jdbcType="INTEGER" mode="INOUT" /> </parameterMap> <procedure id="swapProcedure" parameterMap="swapProcedureMap"> { call swap(?, ?) } </procedure> |
Java Code:
public static Map swap(int a, int b) throws SQLException { Map<String, Integer> m = new HashMap<String, Integer>(2); m.put("a", new Integer(a)); m.put("b", new Integer(b)); //执行存储过程swap sqlMapper.queryForObject("swapProcedure", m); return m; } |
3. maximum
Stored Procedure:CREATE PROCEDURE [dbo].[maximum] @a INT OUTPUT, @b INT OUTPUT, @c INT OUTPUT AS BEGIN IF(@a > @b) SET @c = @a IF(@b >= @a) SET @c = @b END GO |
SqlMap:
<parameterMap id="maxOutProcedureMap" class="java.util.Map"> <parameter property="a" mode="IN" /> <parameter property="b" mode="IN" /> <parameter property="c" jdbcType="INTEGER" mode="OUT" /> </parameterMap> <procedure id="maxOutProcedure"parameterMap="maxOutProcedureMap"> { call maximum (?, ?, ?) } </procedure> |
Java Code:
public static Integer maximum(int a, int b) throws SQLException { Map<String, Integer> m = new HashMap<String, Integer>(2); m.put("a", new Integer(a)); m.put("b", new Integer(b)); m.put("c", new Integer(0)); //执行存储过程maximum sqlMapper.queryForObject("maxOutProcedure", m); return m.get("c"); } |
以上的Java Code类方法都是写在相应的ProcedureDAOImpl类中,可以通过ProcedureDAOImpl类调用相应得方法和传入对应参数来与数据库存储过程交互。
注意:
1.在SqlMap.xml文件中<parameterMap>中参数的顺序跟<Procedure>中”?”的顺序一致。
如:a, b, c; ? = procedurename(?, ?) 则,第一个问号表示a,依次类推。
2.存储过程的sql需要注意:在有些时候{ call maximum (?, ?, ?) } 仔细看左大括号后是有一个空格的,这种情况某些时候可以正确运行。但是,我后来使用中发现左大括号后有空格的情况是会发生异常的:Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]第 1 行: '{' 附近有语法错误。
经试验右大括号前有空格是没问题的。
建议,大家使用的时候都在左大括号后的空格和右大括号前的空格都去除。你也可以自己多尝试一下。
3.当存储过程不需要参数时,也可以这样调用{call donothing} 不要参数括号
*以上示例测试成功,如有问题和建议欢迎反映。
相关文章推荐
- 存储过程输出参数:C#中调用输入输出参数的存储过程
- ibatis如何返回存储过程中的输出参数
- 关于C#调用存储过程,带输出参数,存储过程
- 存储过程有输出参数,在c#中用nhibernate调用存储过程时,如何才能获取到一个结果集和这个输出参数呢?
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- dbutils 执行存储过程,dbutils 调用有输出参数的存储过程
- java调用输入、输出参数为对象的存储过程
- 存储过程输出参数
- C#调用带输入输出参数的存储过程
- 用exec调用带有output输出参数的存储过程
- PHP得到mssql的存储过程的输出参数功能实现
- 存储过程的输出参数为游标,PL/SQL中如何调用 Java代码如何调用
- 使用SQLHelper类调用带输出、返回参数的存储过程
- 关于存储过程的ADO调用的一些心得(输出参数,返回值)
- PHP如何得到mssql的存储过程的输出参数
- asp程序调用SQL Server的存储过程,获取不到输出参数的值
- ibatisNet带输出参数的存储过程的调用
- 使用ADO.NET对象调用存储过程的输入和输出参数
- 获取存储过程输出参数
- MySQL 有输入输出参数的存储过程实例