Java JDBC里如何取得Oracle存储过程返回的动态结果集

 我来答
小锄头andrew
2017-04-26 · TA获得超过627个赞
小锄头andrew
采纳数:224 获赞数:627

向TA提问 私信TA
展开全部
  1. 创建存储过程

    create or replace procedure proc3(stid in student.stuid%type, stname out student.sname%type, stphone out student.phonenumber%type, stuadd out student.saddress%type)
    as countnumber number;
    begin
    select count(*) into countnumber from student where stuid=stid;
    if countnumber=1 then
    select phonenumber into stphone from student where stuid=stid;
    select saddress into stuadd from student where stuid=stid;
    select sname into stname from student where stuid=stid;
    else
             dbms_output.put_line('返回值过多');
    endif;
    end;


  2. 调用存储过程时,要用CallabelStatement的prepareCall 方法。结构:{call 存储过程名(?,?,...)}

    在设置参数的时候,输入参数用set,输出参数要registerOutParameter。取出输出参数的值可以直接用CallabelStatement的get方法



    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Types;

    public class Dao {
        
        String driver="oracle.jdbc.driver.OracleDriver";
        String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
        Connection conn=null;
        CallableStatement cs=null;//PreparedStatement,Statement
        ResultSet rs;
        
        
        public void getConn(){
            try {
                Class.forName(driver);
                conn = DriverManager.getConnection(url, "scott", "tiger");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            
        }
        public void callProc(){
            try {
                cs = conn.prepareCall("{call proc3(?,?,?,?)}");
                cs.setInt(1, 1);
                cs.registerOutParameter(2, Types.VARCHAR);
                cs.registerOutParameter(3, Types.VARCHAR);
                cs.registerOutParameter(4, Types.VARCHAR);
                cs.execute();
                String name = cs.getString(2);
                String phone = cs.getString(3);
                String address = cs.getString(4);
                System.out.println("Name:"+name+"\t Phone:"+phone+"\t Address:"+address);
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                try {
                    if (cs!=null) cs.close();
                    if(conn!=null) conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        public static void main(String[] args) {
            Dao dao = new Dao();
            dao.getConn();
            dao.callProc();
        }
    }
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式