实现目标:在proTest表中查询出id=1的用户姓名
表代码块
create table protest(
id int primary key,
name varchar2(50),
email varchar2(200)
)
insert into protest values(1,'random','');
存储过程代码块
--参数列表 in 代表输入 out 代表输出 后面则是参数类型
create or replace procedure proc_select_protest_byid(in_id in int,out_name out varchar2)
is
begin
select name into out_name from protest where id=in_id;
end;
Java测试代码块
import 包省略
public class Test{
@Test
public void proTest(){
Connection conn = null;
CallableStatement cs = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "a");
cs = conn.prepareCall("{call proc_select_protest_byid(?,?)}");
//设置存储过程的输入参数
cs.setInt(1, 1);
//设置存储过程的输出参数的处理方式
cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);
cs.execute();
//获取存储过程的返回值
String name = cs.getString(2);
System.out.println(name);
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
cs.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
console
random
注意事项
1.对于存储过程的输入参数,使用setXXX;对于输出参数,使用registerOutParameter,问号的顺序要对应,同时需要考虑类型。
2.取出存储过程返回值的方法是CallableStatement提供的getXX()注意输出参数的位置,同时也需要考虑输出参数的类型。
参考资料