Java中调用Oracle中的存储过程的单元测试代码

2014-11-24 18:43:26 · 作者: · 浏览: 0

/*


创建一个存储函数,返回指定员工的姓名,薪水和年收入


*/


create or replace function queryEmp2(eno in number, empname out VARCHAR2,empsal out NUMBER)


--返回年收入


return NUMBER


as


begin


select ename,sal into empname, empsal from emp where empno=eno;


--返回年收入


return empsal*12 + nvl(empsal,0);



end;


/


调用上面的存储过程的单元测试:


package demo;



import java.sql.CallableStatement;


import java.sql.Connection;


import java.sql.DriverManager;



import org.junit.Test;



public class Demo {


@Test


public void testQueryEmpl() throws Exception {


//注册驱动


Class.forName("oracle.jdbc.OracleDriver");


//注意如果端口不是1521时,这时要给他改掉。


String url = "jdbc:oracle:thin:@localhost:1521:orcl";


//默认使用的是orcale中的用户scott


String user = "scott";


//scott的用户名和密码是tiger


String password = "tiger";


//调用存储过程。


String sql = "{call queryEmpl2( , , )}";



Connection conn = DriverManager.getConnection(url,user,password);


CallableStatement call = conn.prepareCall(sql);



//赋参数值


call.setInt(1, 7839);


//对于out参数


//下面的方法是告诉输出的数据的参数类型,即Oracle中的varchar类型。


call.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);


call.registerOutParameter(3, oracle.jdbc.OracleTypes.NUMBER);



//执行


call.execute();


//取结果,获得名字和薪水


String name = call.getString(2);


double sal = call.getDouble(3);



System.out.println(name + " " + sal);



//关闭资源


call.close();


conn.close();


}


}