论坛首页 入门技术论坛

itbatis调用Oracle的存储过程--oracle10g版本

浏览 3396 次
该帖已经被评为新手帖
作者 正文
   发表时间:2008-01-06   最后修改:2009-08-31

public class Dept {
 private Integer deptno;// 部门编号
 private String dname;// 部门名称
 private String loc;// 部门位置

//省略get 和set方法

}

public class Emp {
 private Integer empno;//员工编号
 private String ename;//员工姓名
 private String job;//职位
 private Integer mgr;//经理号
 private Date hiredate;//雇佣日期
 private Float sal;//工资
 private Float comm;//工资补助
 private Integer deptno;//部门编号
//省略get 和set方法

}

//sql

create table dept
(
deptno number(7) primary key,
dname varchar2(30) ,
loc varchar2(30)
);
insert into dept values(1,'市场部','');
insert into dept values(2,'开发部','');
insert into dept values(3,'服务部','');
create table emp
(
empno number(7) primary key,
ename varchar2(20),
job varchar2(10),
mgr number(4),
hiredate date,
sal number(7,2),
comm number(7,2),
deptno number(7)
);
--alter table emp add constraint foreign key fk_emp_dept(deptno) references dept(deptno);
insert into emp values(7233,'tomcat','saler',7369,date'2000-9-5',5000,null,1);
insert into emp values(7369,'mysql','manager',1,date'2000-2-12',6600,200,2);
insert into emp values(7562,'java','saler',2,date'2000-3-23',8000,100,1);
insert into emp values(7412,'struts','saler',2,date'1999-5-14',20000,null,1);
insert into emp values(7986,'hibernate','manager',7512,date'2000-2-12',6600,200,2);
insert into emp values(7328,'spring','saler',2,date'1988-12-25',8000,1000,1);

//创建序列

create sequence myseq;

//存储过程
create or replace
 procedure mypro(dept_no out number,deptname in varchar2,dept_loc in varchar2)
 as
 no number(7);
 insertStr varchar(150);
 begin
 select myseq.nextval into no from dual;
 dept_no:=no;
 insertStr := 'insert into dept(deptno,dname,loc)
 values('||dept_no||','||''''||deptname||''''||','||''''||dept_loc||''''||')';
 execute immediate insertStr;
 commit;
 end;


ibatis的配置文件:
 <parameterMap id="save" class="java.util.Map">
 <!-- jdbcType="int" 可能会抛出异常 -->
  <parameter property="dept_no" javaType="java.lang.Long"
   jdbcType="INTEGER" mode="OUT" />
  <parameter property="dept_name" jdbcType="VARCHAR2"
   javaType="java.lang.String" mode="IN" />
  <parameter property="dept_loc" javaType="java.lang.String"
   jdbcType="VARCHAR2" mode="IN" />
 </parameterMap>
 <!-- 执行存储过程 有返回值-->
 <procedure id="saveDept" parameterMap="save"
  resultClass="java.lang.Integer">
  {call mypro(?,?,?)}
 </procedure>

3 测试方法
 SqlMapClient sqlClient = null;
  try {
   Reader reader = Resources
     .getResourceAsReader("config/SqlMapConfig.xml");
   sqlClient = SqlMapClientBuilder.buildSqlMapClient(reader);
   reader.close();
   // Map map = new HashMap();
   // //map.put("deptno", 10);
   // map.put("deptname", "name");
   // map.put("dept_loc", "loc");
   // sqlClient.startTransaction();
   // sqlClient.queryForObject("saveDept", map);
   //   
   // sqlClient.commitTransaction();

   Map map = new HashMap();
   BigDecimal key = new BigDecimal(0);
   map.put("dept_no", key);
   map.put("dept_name", "name");
   map.put("dept_loc", "loc");
   sqlClient.startTransaction();
   Object object = sqlClient.queryForObject("saveDept", map);
   sqlClient.commitTransaction();
   System.out.println(map.get("dept_no").toString());
  } catch (Exception e) {
   e.printStackTrace();
   System.out.println(e.getMessage());
  }

   发表时间:2008-01-07  
你把deptno的10改为Long型的看看
0 请登录后投票
   发表时间:2008-01-07  
jdbcType="VARCHAR2"

标准的jdbc types没有varchar2。请使用varchar
0 请登录后投票
   发表时间:2008-01-07  
我都尝过了。读没有效果。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics