Java調(diào)用Oracle存儲過程詳解
Java調(diào)用Oracle存儲過程詳解
步驟:
1、編寫Oracle存儲過程
2、編寫數(shù)據(jù)庫獲取連接工具類
3、編寫簡單應(yīng)用調(diào)用存儲過程
實現(xiàn):
1、Oracle存儲過程:
/*測試表*/ create table test( id varchar2(32), name varchar2(32) ); /*存儲過程 插入數(shù)據(jù)*/ 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; /*存儲過程 返回結(jié)果集*/ CREATE OR REPLACE PROCEDURE select_procedure( para_id IN VARCHAR2, name OUT sys_refcursor /* 這個sys_refcursor類型在SYS.STANDARD包中 */ ) AS BEGIN OPEN name FOR SELECT * FROM test WHERE id = para_id; END;
2、JDBC工具類
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";
/**
* 通過靜態(tài)代碼塊 注冊數(shù)據(jù)庫驅(qū)動
*/
static {
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 獲得Connection
*
* @return
*/
public static Connection getConnection() {
Connection conn = null;
try {
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* 獲得Statement
*
* @return
*/
public static Statement getStatement() {
Statement st = null;
try {
st = getConnection().createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
return st;
}
/**
* 關(guān)閉ResultSet
*
* @param rs
*/
public static void closeResultSet(ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 關(guān)閉Statement
*
* @param st
*/
public static void closeStatement(Statement st) {
if (st != null) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 關(guān)閉Connection
*
* @param conn
*/
public static void closeConnection(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 關(guān)閉全部
*
* @param rs
* @param sta
* @param conn
*/
public static void closeAll(ResultSet rs, Statement sta, Connection conn) {
closeResultSet(rs);
closeStatement(sta);
closeConnection(conn);
}
}
3、調(diào)用存儲過程:
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;
/**
* 測試調(diào)用存儲過程
*
*/
public class StoredTest {
public static void main(String[] args) {
insert_call();
//select_call();
}
/**
* 執(zhí)行存儲過程 插入數(shù)據(jù)
*/
public static void insert_call() {
Connection conn = DBUtil.getConnection();
PreparedStatement pst = null;
CallableStatement proc = null; // 創(chuàng)建執(zhí)行存儲過程的對象
try {
proc = conn.prepareCall("{ call insert_procedure(?,?) }");
proc.setString(1, "1"); // 設(shè)置第一個輸入?yún)?shù)
proc.setString(2, "hello call"); // 設(shè)置第一個輸入?yún)?shù)
proc.execute();// 執(zhí)行
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
// 關(guān)閉IO流
proc.close();
DBUtil.closeAll(null, pst, conn);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 執(zhí)行存儲過程 查詢數(shù)據(jù)
*/
public static void select_call() {
Connection conn = DBUtil.getConnection();
CallableStatement stmt;
try {
stmt = conn.prepareCall("{ call select_procedure(?, ?) }"); // 用此調(diào)用方法不能實現(xiàn)多行語法
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);
}
}
}
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- Java Spring動態(tài)生成Mysql存儲過程詳解
- 詳解java調(diào)用存儲過程并封裝成map
- MyBatis創(chuàng)建存儲過程的實例代碼_動力節(jié)點Java學院整理
- Java實現(xiàn)調(diào)用MySQL存儲過程詳解
- 詳解Java的JDBC API的存儲過程與SQL轉(zhuǎn)義語法的使用
- java編程調(diào)用存儲過程中得到新增記錄id號的實現(xiàn)方法
- Java調(diào)用MySQL存儲過程并獲得返回值的方法
- java調(diào)用mysql存儲過程實例分析
- Java中調(diào)用SQL Server存儲過程詳解
- java調(diào)用oracle分頁存儲過程示例
- java調(diào)用Oracle存儲過程的方法實例
- Java下使用Oracle存儲過程(詳解)
- Java存儲過程調(diào)用CallableStatement的方法
相關(guān)文章
SpringBoot+Quartz+數(shù)據(jù)庫存儲的完美集合
這篇文章主要介紹了SpringBoot+Quartz+數(shù)據(jù)庫存儲的示例代碼,本文通過實例代碼圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02
SpringBoot中實現(xiàn)啟動任務(wù)的實現(xiàn)步驟
這篇文章主要介紹了SpringBoot中實現(xiàn)啟動任務(wù)的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09
Spring HandlerInterceptor實現(xiàn)原理代碼解析
這篇文章主要介紹了Spring HandlerInterceptor實現(xiàn)原理代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-10-10
Springboot2.0配置JPA多數(shù)據(jù)源連接兩個mysql數(shù)據(jù)庫方式
這篇文章主要介紹了Springboot2.0配置JPA多數(shù)據(jù)源連接兩個mysql數(shù)據(jù)庫方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
springboot關(guān)閉druid監(jiān)控 druid2改配置文件無效的解決
這篇文章主要介紹了springboot關(guān)閉druid監(jiān)控 druid2改配置文件無效的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
基于Jackson實現(xiàn)API接口數(shù)據(jù)脫敏的示例詳解
用戶的一些敏感數(shù)據(jù),例如手機號、郵箱、身份證等信息,在數(shù)據(jù)庫以明文存儲,但在接口返回數(shù)據(jù)給瀏覽器(或三方客戶端)時,希望對這些敏感數(shù)據(jù)進行脫敏,所以本文就給大家介紹以惡如何利用Jackson實現(xiàn)API接口數(shù)據(jù)脫敏,需要的朋友可以參考下2023-08-08

