Java calls Oracle stored procedure detail

  • 2020-06-12 09:01:21
  • OfStack

Java calls Oracle stored procedure detail

Steps:

1. Write Oracle stored procedures

2, write the database to get the connection tool class

3, write a simple application call stored procedure

Implementation:

1. Oracle Stored Procedure:


/* The test table */
create table test(
  id varchar2(32),
  name varchar2(32)
);

/* The stored procedure   Insert data */  
CREATE OR REPLACE PROCEDURE insert_procedure(
  PARA1 IN VARCHAR2,
  PARA2 IN VARCHAR2
) AS
BEGIN
 INSERT INTO test (id, name) VALUES (PARA1, PARA2);
END insert_procedure;

/* The stored procedure   Return result set */
CREATE OR REPLACE PROCEDURE select_procedure(
  para_id IN VARCHAR2,
  name OUT sys_refcursor /*  this sys_refcursor Type in the SYS.STANDARD In the package  */
) AS
BEGIN
 OPEN name FOR
  SELECT * FROM test WHERE id = para_id;
END;

2. JDBC tool class


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBUtil {
  public static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
  public static final String URL = "jdbc:oracle:thin:@localhost:1521/orcl";
  public static final String USERNAME = "pfm";
  public static final String PASSWORD = "pfm";

  /**
   *  Through static code blocks   Register database driver 
   */
  static {
    try {
      Class.forName(DRIVER);
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
  }

  /**
   *  To obtain Connection
   * 
   * @return
   */
  public static Connection getConnection() {
    Connection conn = null;
    try {
      conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
    } catch (SQLException e) {
      e.printStackTrace();
    }
    return conn;
  }

  /**
   *  To obtain Statement
   * 
   * @return
   */
  public static Statement getStatement() {
    Statement st = null;
    try {
      st = getConnection().createStatement();
    } catch (SQLException e) {
      e.printStackTrace();
    }
    return st;
  }

  /**
   *  Shut down ResultSet
   * 
   * @param rs
   */
  public static void closeResultSet(ResultSet rs) {
    if (rs != null) {
      try {
        rs.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }

  /**
   *  Shut down Statement
   * 
   * @param st
   */
  public static void closeStatement(Statement st) {
    if (st != null) {
      try {
        st.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }

  /**
   *  Shut down Connection
   * 
   * @param conn
   */
  public static void closeConnection(Connection conn) {
    if (conn != null) {
      try {
        conn.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }

  /**
   *  Close all 
   * 
   * @param rs
   * @param sta
   * @param conn
   */
  public static void closeAll(ResultSet rs, Statement sta, Connection conn) {
    closeResultSet(rs);
    closeStatement(sta);
    closeConnection(conn);
  }

}

3. Call the stored procedure:


import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.jdbc.driver.OracleTypes;

/**
 *  The test calls the stored procedure 
 * 
 */
public class StoredTest {
  public static void main(String[] args) {
    insert_call();
    //select_call();
  }

  /**
   *  Execute stored procedure   Insert data 
   */
  public static void insert_call() {
    Connection conn = DBUtil.getConnection();
    PreparedStatement pst = null;

    CallableStatement proc = null; //  Create the object that executes the stored procedure 
    try {
      proc = conn.prepareCall("{ call insert_procedure(?,?) }");
      proc.setString(1, "1"); //  Set up the first 1 Input parameters 
      proc.setString(2, "hello call"); //  Set up the first 1 Input parameters 
      proc.execute();//  perform 

    } catch (SQLException e) {
      e.printStackTrace();
    } finally {
      try {
        //  Shut down IO flow 
        proc.close();
        DBUtil.closeAll(null, pst, conn);
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }

  /**
   *  Execute stored procedure   Query data 
   */
  public static void select_call() {
    Connection conn = DBUtil.getConnection();

    CallableStatement stmt;
    try {
      stmt = conn.prepareCall("{ call select_procedure(?, ?) }"); //  Multi-line syntax cannot be implemented with this calling method 
      stmt.setString(1, "1");
      stmt.registerOutParameter(2, OracleTypes.CURSOR);
      stmt.execute();
      ResultSet rs = (ResultSet) stmt.getObject(2);
      while (rs.next()) {
        System.out.println(rs.getString("name"));
      }
    } catch (SQLException e) {
      e.printStackTrace();
    } finally {
      DBUtil.closeConnection(conn);
    }
  }
}

Thank you for reading, I hope to help you, thank you for your support to this site!


Related articles: