在java中调用存储过程:
一、只返回一个数值
1.存储过程
create or replace procedure getCount(a in number,
b in number,
c out number) is
sql_str varchar2(100);
begin
sql_str := 'select ' || a || '+' || b || 'into: c from dual';
execute immediate sql_str
into c;
dbms_output.put_line(sql_str);
end getCount;
2.java中取值
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@127.0.0.1:1521:lubby";
Connection conn = DriverManager.getConnection(url, "admin", "admin");
CallableStatement cs = conn.prepareCall("{call GETCOUNT(?,?,?)}");
cs.setFloat(1, 33);
cs.setFloat(2,33);
cs.registerOutParameter(3, oracle.jdbc.OracleTypes.FLOAT);
cs.execute();
System.out.println(cs.getInt(3));
二、返回结果集的
1.存储过程:
create or replace procedure getinfo(param_row in number,
param_size in number,
out_count out number,
out_list out sys_refcursor) is
sql_str varchar2(250);
sql_count_str varchar2(250);
begin
--求总数
sql_count_str := 'select count(*) from info ';
--求结果集
if param_row is not null and param_size is not null then
sql_str := 'select rownum rn,t1.* from info t1 where 1=1 and rownum <=' ||
param_row * param_size;
sql_str := 'select * from (' || sql_str || ') t2 where 1=1 and t2.rn >' ||
(param_row - 1) * param_size;
end if;
--输出查询语句
dbms_output.put_line(sql_str);
dbms_output.put_line(sql_count_str);
--返回结果集和总数
execute immediate sql_count_str
into out_count;
open out_list for sql_str;
end getinfo;
2.java中取结果集
public static void main(String[] args) throws ClassNotFoundException,
SQLException {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@127.0.0.1:1521:lubby";
Connection conn = DriverManager.getConnection(url, "admin", "admin");
CallableStatement procedure = conn.prepareCall("{call getinfo(?,?,?,?)}");
procedure.setInt(1, 1);
procedure.setInt(2, 10);
procedure.registerOutParameter(3, OracleTypes.FLOAT);
procedure.registerOutParameter(4, OracleTypes.CURSOR);
procedure.execute();
Integer count = 0;
count = procedure.getInt(3);
System.out.println("count is " + count);
ResultSet rs = (ResultSet) procedure.getObject(4);
while(rs.next()){
System.out.println("id:" + rs.getInt(1));
System.out.println("bussiness:" + rs.getString(2));
System.out.println("customer:" + rs.getString(3));
System.out.println("brand:" + rs.getString(4));
}
}
一、只返回一个数值
1.存储过程
create or replace procedure getCount(a in number,
b in number,
c out number) is
sql_str varchar2(100);
begin
sql_str := 'select ' || a || '+' || b || 'into: c from dual';
execute immediate sql_str
into c;
dbms_output.put_line(sql_str);
end getCount;
2.java中取值
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@127.0.0.1:1521:lubby";
Connection conn = DriverManager.getConnection(url, "admin", "admin");
CallableStatement cs = conn.prepareCall("{call GETCOUNT(?,?,?)}");
cs.setFloat(1, 33);
cs.setFloat(2,33);
cs.registerOutParameter(3, oracle.jdbc.OracleTypes.FLOAT);
cs.execute();
System.out.println(cs.getInt(3));
二、返回结果集的
1.存储过程:
create or replace procedure getinfo(param_row in number,
param_size in number,
out_count out number,
out_list out sys_refcursor) is
sql_str varchar2(250);
sql_count_str varchar2(250);
begin
--求总数
sql_count_str := 'select count(*) from info ';
--求结果集
if param_row is not null and param_size is not null then
sql_str := 'select rownum rn,t1.* from info t1 where 1=1 and rownum <=' ||
param_row * param_size;
sql_str := 'select * from (' || sql_str || ') t2 where 1=1 and t2.rn >' ||
(param_row - 1) * param_size;
end if;
--输出查询语句
dbms_output.put_line(sql_str);
dbms_output.put_line(sql_count_str);
--返回结果集和总数
execute immediate sql_count_str
into out_count;
open out_list for sql_str;
end getinfo;
2.java中取结果集
public static void main(String[] args) throws ClassNotFoundException,
SQLException {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@127.0.0.1:1521:lubby";
Connection conn = DriverManager.getConnection(url, "admin", "admin");
CallableStatement procedure = conn.prepareCall("{call getinfo(?,?,?,?)}");
procedure.setInt(1, 1);
procedure.setInt(2, 10);
procedure.registerOutParameter(3, OracleTypes.FLOAT);
procedure.registerOutParameter(4, OracleTypes.CURSOR);
procedure.execute();
Integer count = 0;
count = procedure.getInt(3);
System.out.println("count is " + count);
ResultSet rs = (ResultSet) procedure.getObject(4);
while(rs.next()){
System.out.println("id:" + rs.getInt(1));
System.out.println("bussiness:" + rs.getString(2));
System.out.println("customer:" + rs.getString(3));
System.out.println("brand:" + rs.getString(4));
}
}