Java調(diào)用Oracle存儲(chǔ)過程詳解
Java調(diào)用Oracle存儲(chǔ)過程詳解
步驟:
1、編寫Oracle存儲(chǔ)過程
2、編寫數(shù)據(jù)庫獲取連接工具類
3、編寫簡(jiǎn)單應(yīng)用調(diào)用存儲(chǔ)過程
實(shí)現(xiàn):
1、Oracle存儲(chǔ)過程:
/*測(cè)試表*/ create table test( id varchar2(32), name varchar2(32) ); /*存儲(chǔ)過程 插入數(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; /*存儲(chǔ)過程 返回結(jié)果集*/ CREATE OR REPLACE PROCEDURE select_procedure( para_id IN VARCHAR2, name OUT sys_refcursor /* 這個(gè)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)代碼塊 注冊(cè)數(shù)據(jù)庫驅(qū)動(dòng)
*/
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)用存儲(chǔ)過程:
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;
/**
* 測(cè)試調(diào)用存儲(chǔ)過程
*
*/
public class StoredTest {
public static void main(String[] args) {
insert_call();
//select_call();
}
/**
* 執(zhí)行存儲(chǔ)過程 插入數(shù)據(jù)
*/
public static void insert_call() {
Connection conn = DBUtil.getConnection();
PreparedStatement pst = null;
CallableStatement proc = null; // 創(chuàng)建執(zhí)行存儲(chǔ)過程的對(duì)象
try {
proc = conn.prepareCall("{ call insert_procedure(?,?) }");
proc.setString(1, "1"); // 設(shè)置第一個(gè)輸入?yún)?shù)
proc.setString(2, "hello call"); // 設(shè)置第一個(gè)輸入?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í)行存儲(chǔ)過程 查詢數(shù)據(jù)
*/
public static void select_call() {
Connection conn = DBUtil.getConnection();
CallableStatement stmt;
try {
stmt = conn.prepareCall("{ call select_procedure(?, ?) }"); // 用此調(diào)用方法不能實(shí)現(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);
}
}
}
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- Java Spring動(dòng)態(tài)生成Mysql存儲(chǔ)過程詳解
- 詳解java調(diào)用存儲(chǔ)過程并封裝成map
- MyBatis創(chuàng)建存儲(chǔ)過程的實(shí)例代碼_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- Java實(shí)現(xiàn)調(diào)用MySQL存儲(chǔ)過程詳解
- 詳解Java的JDBC API的存儲(chǔ)過程與SQL轉(zhuǎn)義語法的使用
- java編程調(diào)用存儲(chǔ)過程中得到新增記錄id號(hào)的實(shí)現(xiàn)方法
- Java調(diào)用MySQL存儲(chǔ)過程并獲得返回值的方法
- java調(diào)用mysql存儲(chǔ)過程實(shí)例分析
- Java中調(diào)用SQL Server存儲(chǔ)過程詳解
- java調(diào)用oracle分頁存儲(chǔ)過程示例
- java調(diào)用Oracle存儲(chǔ)過程的方法實(shí)例
- Java下使用Oracle存儲(chǔ)過程(詳解)
- Java存儲(chǔ)過程調(diào)用CallableStatement的方法
相關(guān)文章
Java實(shí)現(xiàn)公眾號(hào)功能、關(guān)注及消息推送實(shí)例代碼
公眾號(hào)開發(fā)近些年是一個(gè)比較熱門的方向,下面這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)公眾號(hào)功能、關(guān)注及消息推送的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
使用RequestBodyAdvice實(shí)現(xiàn)對(duì)Http請(qǐng)求非法字符過濾
這篇文章主要介紹了使用RequestBodyAdvice實(shí)現(xiàn)對(duì)Http請(qǐng)求非法字符過濾的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
Redis實(shí)現(xiàn)延遲隊(duì)列的全流程詳解
Redisson是Redis服務(wù)器上的分布式可伸縮Java數(shù)據(jù)結(jié)構(gòu),這篇文中主要為大家介紹了Redisson實(shí)現(xiàn)的優(yōu)雅的延遲隊(duì)列的方法,需要的可以參考一下2023-03-03
java利用正則表達(dá)式處理特殊字符的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于java利用正則表達(dá)式處理特殊字符的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
spring?參數(shù)校驗(yàn)Validation示例詳解
Spring提供了Validation工具類來實(shí)現(xiàn)對(duì)客戶端傳來的請(qǐng)求參數(shù)的有效校驗(yàn),本文給大家介紹spring?參數(shù)校驗(yàn)Validation示例詳解,感興趣的朋友一起看看吧2024-12-12
通過實(shí)例解析Java分布式鎖三種實(shí)現(xiàn)方法
這篇文章主要介紹了通過實(shí)例解析Java分布式鎖三種實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
Spring Boot整合QueryDSL的實(shí)現(xiàn)示例
這篇文章主要介紹了Spring Boot整合QueryDSL的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09

