首页 > 编程 > Java > 正文

java 调用存储过程案列分析

2019-11-06 08:15:04
字体:
来源:转载
供稿:网友

1:创建存储过程

此存储过程通过传入的参数(Name),返回一个参数(address)。

create or replace PRocedure demo_procedure(namedemo in varchar2,addressdemo out varchar2)asbegin select address into addressdemo from system.demo where name=namedemo;end;

2:java部分:调用存储过程时,要用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.Statement;  import java.sql.Types;    public class TestProcedureTwo {    public TestProcedureTwo() {    }    public static void main(String[] args ){      String driver = "Oracle.jdbc.driver.OracleDriver";      String strUrl = "jdbc:oracle:thin:@localhost:1521:myoracle";      Statement stmt = null;      ResultSet rs = null;      Connection conn = null;      try {        Class.forName(driver);        conn =  DriverManager.getConnection(strUrl, "system", "admin");        CallableStatement proc = null;       proc = conn.prepareCall("{ call dem_procedure(?,?) }");  //调用存储过程      proc.setString(1, "kalision");   //存储过程传入的参数      proc.registerOutParameter(2, Types.VARCHAR);  //存储过程输出的参数      proc.execute();        String testPrint = proc.getString(2);        System.out.println("存储过程返回的值是:"+testPrint);      }      catch (SQLException ex2) {        ex2.printStackTrace();      }      catch (Exception ex2) {        ex2.printStackTrace();      }      finally{        try {          if(rs != null){            rs.close();            if(stmt!=null){              stmt.close();            }            if(conn!=null){              conn.close();            }          }        }        catch (SQLException ex1) {        }      }    }  }  


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表