當前位置:首頁 » 存儲配置 » oraclejava調用存儲過程

oraclejava調用存儲過程

發布時間: 2022-07-26 23:51:08

① 如何使用java語言調用oracle存儲過程

1.api上的方法為 Connection.prepareCall(java.lang.String)
2.prepareCall(String sql)
throws SQLException
參數:sql - 可以包含一個或多個 '?' 參數佔位符的 SQL 語句。通常此語句是使用 JDBC 調用轉義語法指定的。
3.JDBC API 提供了一個存儲過程 SQL 轉義語法,該語法允許對所有 RDBMS 使用標准方式調用存儲過程。此轉義語法有一個包含結果參數的形式和一個不包含結果參數的形式。分別為:
{?= call <procere-name>[(<arg1>,<arg2>, ...)]}
{call <procere-name>[(<arg1>,<arg2>, ...)]}

4.示例,無返回值調用:Connection.prepareCall({ call p_test(p1,p2)})

② 在Oracle中,如何用java調用其存儲過程

//通過編寫的連接類創建一個連接
dbconn db = new dbconn();
Connection con1 = db.conn;
String callSQL1 = new String();
ResultSet rs1 = null;
//創建一個CallableStatement變數st1來調用存儲過程信息
CallableStatement st1 = null;
try {
st1 = con1.prepareCall("{ call p(?,?,?,?) }");

st1.setString(1, "參數1");
st1.setString(2, "參數2");
st1.setString(3, "參數3");
st1.registerOutParameter(4,Types.INTEGER); //此處4 代表第一個"?" 則表示存儲過程返回的值 這里要注意Types的類型,當需要有返回值時

st1.execute();
System.out.println(st1.getInt(4));//輸出存儲過程的返回值,當有返回值時
} catch (Exception error) {
try {
con1.rollback(); //操作不成功則回退
} catch (Exception ex9) {
ex9.printStackTrace();
}
out.print("系統出錯" + error.getMessage());
} finally {
try {
if (st1 != null) {
st1.close();
}
} catch (Exception error) {

}
db.disconnect();
}

給你提供一個參考,希望樓主採納。

③ 求java調用oracle存儲過程

一:無返回值的存儲過程
存儲過程為:
CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS
BEGIN
INSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2);
END TESTA;
然後呢,在java里調用時就用下面的代碼:
package com.hyq.src;
import java.sql.*;
import java.sql.ResultSet;
public class TestProcereOne {
public TestProcereOne() {
}
public static void main(String[] args ){
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521: hyq ";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
CallableStatement cstmt = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, " hyq", " hyq ");
CallableStatement proc = null;
proc = conn.prepareCall("{ call HYQ.TESTA(?,?) }");
proc.setString(1, "100");
proc.setString(2, "TestOne");
proc.execute();
}
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) {
}
}
}
}
當然了,這就先要求要建張表TESTTB,裡面兩個欄位(I_ID,I_NAME)。
二:有返回值的存儲過程(非列表)
存儲過程為:
CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) AS
BEGIN
SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1;
END TESTB;
在java里調用時就用下面的代碼:
package com.hyq.src;
public class TestProcereTWO {
public TestProcereTWO() {
}
public static void main(String[] args ){
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl ="jdbc:oracle:thin:@127.0.0.1:1521:hyq";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, " hyq", " hyq ");
CallableStatement proc = null;
proc = conn.prepareCall("{ call HYQ.TESTB(?,?) }");
proc.setString(1, "100");
proc.registerOutParameter(2, Types.VARCHAR);
proc.execute();
String testPrint = proc.getString(2);
System.out.println("=testPrint=is="+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) {
}
}
}
}
}
注意,這里的proc.getString(2)中的數值2並非任意的,而是和存儲過程中的out列對應的,如果out是在第一個位置,那就是proc.getString(1),如果是第三個位置,就是proc.getString(3),當然也可以同時有多個返回值,那就是再多加幾個out參數了。
三:返回列表
由於oracle存儲過程沒有返回值,它的所有返回值都是通過out參數來替代的,列表同樣也不例外,但由於是集合,所以不能用一般的參數,必須要用pagkage了.所以要分兩部分,
1, 建一個程序包。如下:
CREATE OR REPLACE PACKAGE TESTPACKAGE AS
TYPE Test_CURSOR IS REF CURSOR;
end TESTPACKAGE;
2,建立存儲過程,存儲過程為:
CREATE OR REPLACE PROCEDURE TESTC(p_CURSOR out TESTPACKAGE.Test_CURSOR) IS
BEGIN
OPEN p_CURSOR FOR SELECT * FROM HYQ.TESTTB;
END TESTC;
可以看到,它是把游標(可以理解為一個指針),作為一個out 參數來返回值的。
在java里調用時就用下面的代碼:
package com.hyq.src;
import java.sql.*;
import java.io.OutputStream;
import java.io.Writer;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import oracle.jdbc.driver.*;
public class TestProcereTHREE {
public TestProcereTHREE() {
}
public static void main(String[] args ){
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl ="jdbc:oracle:thin:@127.0.0.1:1521:hyq";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, "hyq","hyq");
CallableStatement proc = null;
proc = conn.prepareCall("{ call hyq.testc(?) }");
proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);
proc.execute();
rs = (ResultSet)proc.getObject(1);
while(rs.next())
{
System.out.println("" + rs.getString(1) +""+rs.getString(2)+"");
}
}
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) {
}
}
}
}

④ 如何在ORACLE中使用JAVA存儲過程

比如下面寫的是Oracle的一個存儲過程:
create or replace procere queryempinfo(eno in number,
pename out varchar2,
psal out number,
pjob out varchar2)
as
begin
--得到該員工的姓名 月薪和職位
select ename, sal, job into pename, psal, pjob from emp where empno = eno;
end;

Java調用Oracle的存儲過程
try {
Class.forName(driverName);
conn = DriverManager.getConnection(url, username, password);
stat = conn.prepareCall(sql);

// 一個輸入參數和三個輸出參數
stat.setInt(1, 7566);
stat.registerOutParameter(2, OracleTypes.VARCHAR);
stat.registerOutParameter(3, OracleTypes.NUMBER);
stat.registerOutParameter(4, OracleTypes.VARCHAR);
stat.execute();

String name = stat.getString(2);
int sal = stat.getInt(3);
String job = stat.getString(4);

System.out.println("name: " + name + ", sal: " + sal + ", job: " + job);

} catch (Exception e) {
e.printStackTrace();
} finally {
close(conn, stat, rs);
}

⑤ 在java中怎麼調用oracle的存儲過程

java下實現調用oracle的存儲過程和函數
在oracle下創建一個test的賬戶,然後按一下步驟執行:
1.創建表:STOCK_PRICES

--創建表格
CREATE TABLE STOCK_PRICES(
RIC VARCHAR(6) PRIMARY KEY,
PRICE NUMBER(7,2),
UPDATED DATE );

2.插入測試數據:

--插入數據
INSERT INTO stock_prices values('1111',1.0,SYSDATE);
INSERT INTO stock_prices values('1112',2.0,SYSDATE);
INSERT INTO stock_prices values('1113',3.0,SYSDATE);
INSERT INTO stock_prices values('1114',4.0,SYSDATE);

3.建立一個返回遊標: PKG_PUB_UTILS

--建立一個返回遊標
CREATE OR REPLACE PACKAGE PKG_PUB_UTILS IS
--動態游標
TYPE REFCURSOR IS REF CURSOR;
END PKG_PUB_UTILS;

4.創建和存儲過程:P_GET_PRICE

--創建存儲過程
CREATE OR REPLACE PROCEDURE P_GET_PRICE
(
AN_O_RET_CODE OUT NUMBER,
AC_O_RET_MSG OUT VARCHAR2,
CUR_RET OUT PKG_PUB_UTILS.REFCURSOR,
AN_I_PRICE IN NUMBER
)
IS
BEGIN
AN_O_RET_CODE := 0;
AC_O_RET_MSG := '操作成功';

OPEN CUR_RET FOR
SELECT * FROM STOCK_PRICES WHERE PRICE<AN_I_PRICE;
EXCEPTION
WHEN OTHERS THEN
AN_O_RET_CODE := -1;
AC_O_RET_MSG := '錯誤代碼:' || SQLCODE || CHR(13) || '錯誤信息:' || SQLERRM;
END P_GET_PRICE;

5.創建函數:

--創建函數:F_GET_PRICE
CREATE OR REPLACE FUNCTION F_GET_PRICE(v_price IN NUMBER)
RETURN PKG_PUB_UTILS.REFCURSOR
AS
stock_cursor PKG_PUB_UTILS.REFCURSOR;
BEGIN
OPEN stock_cursor FOR
SELECT * FROM stock_prices WHERE price < v_price;
RETURN stock_cursor;

⑥ java調用oracle的存儲過程

// 首先獲得與資料庫的連接
conn = DriverManager.getConnection (url, userName, userPwd);
CallableStatement proc = null;
proc = conn.prepareCall ("{call 資料庫名稱.存儲過程名(?)}");// 一個問號表示傳入一個參數
proc.setString(1,name); // name為你傳入的參數
rs = proc.executeQuery(); // 執行sql語句,返回結果集

⑦ oracle資料庫調用存儲過程

這個需要分情況的
如果是在應用程序(Java等)中調用存儲過程,需要根據相應語言的語法來進行。這個可以通過查找相應語言的幫助來找到。
如果是在Oracle的其他存儲過程中調用,直接寫存儲過程名就可以了。傳入相應的參數,即可執行。
如果在Oracle的命令行中,使用EXEC
存儲過程名(參數)
的方式即可調用。
如果存儲過程執行的語句寫在SQL文件中,則可以通過調用文件的方式執行,即
SQL>
@D:\SQL\example.sql的形式

⑧ 在java 怎樣調用oracle存儲過程

java.sql
裡面的

public interface CallableStatement

extends PreparedStatement

用於執行 SQL 存儲過程的介面。JDBC API 提供了一個存儲過程 SQL 轉義語法,該語法允許對所有 RDBMS
使用標准方式調用存儲過程。此轉義語法有一個包含結果參數的形式和一個不包含結果參數的形式。如果使用結果參數,則必須將其注冊為 OUT
參數。其他參數可用於輸入、輸出或同時用於二者。參數是根據編號按順序引用的,第一個參數的編號是 1。
{?= call <procere-name>[(<arg1>,<arg2>, ...)]}
{call <procere-name>[(<arg1>,<arg2>, ...)]}

⑨ 如何在Oracle中使用Java存儲過程

通常有三種方法來創建java存儲過程。

1. 使用oracle的sql語句來創建:

e.g. 使用create or replace and compile java source named "<name>" as

後邊跟上java源程序。要求類的方法必須是public static的,才能用於存儲過程。

SQL>"javademo1"
as
importjava.sql.*;
publicclassJavaDemo1
{
publicstaticvoidmain(String[]argv)
{
System.out.println("hello,javademo1");
}
}
/

Java已創建。

SQL>showerrorsjavasource"javademo1"
沒有錯誤。

SQL>
as
languagejavaname'JavaDemo1.main(java.lang.String[])';
/

過程已創建。

SQL>setserveroutputon
SQL>calljavademo1();

調用完成。

SQL>calldbms_java.set_output(5000);

調用完成。

SQL>calljavademo1();
hello,javademo1

調用完成。

SQL>calljavademo1();
hello,javademo1
調用完成。

2. 使用外部class文件來裝載創建

e.g. 這里既然用到了外部文件,必然要將class文件放到oracle Server的某一目錄下邊。

publicclassOracleJavaProc
{
publicstaticvoidmain(String[]argv)
{
System.out.println("It'saJavaOracleprocere.");
}
}


SQL>;

授權成功。

SQL>connscott/[email protected]
已連接。
SQL>createorreplacedirectorytest_diras'd:/oracle';

目錄已創建。

SQL>(test_dir,'OracleJavaProc.CLASS')
2/

Java已創建。

SQL>'OracleJavaProc.main(java.lang.String[])';
2/

過程已創建。

SQL>calltestjavaproc();

調用完成。

SQL>executetestjavaproc;

PL/SQL過程已成功完成。

SQL>setserveroutputonsize5000
SQL>calldbms_java.set_output(5000);

調用完成。

SQL>executetestjavaproc;
It'saJavaOracleprocere.

3. 我推薦的一種方法,直接使用loadjava命令遠程裝載並創建。
先創建一個類, e.g.

importjava.sql.*;
importoracle.jdbc.*;

publicclassOracleJavaProc{

//Addasalgradetothedatabase.
publicstaticvoidaddSalGrade(intgrade,intlosal,inthisal){

System.out.println("...");

try{
Connectionconn=
DriverManager.getConnection("jdbc:default:connection:");

Stringsql=
"INSERTINTOsalgrade"+
"(GRADE,LOSAL,HISAL)"+
"VALUES(?,?,?)";
PreparedStatementpstmt=conn.prepareStatement(sql);
pstmt.setInt(1,grade);
pstmt.setInt(2,losal);
pstmt.setInt(3,hisal);
pstmt.executeUpdate();
pstmt.close();
}
catch(SQLExceptione){
System.err.println("ERROR!AddingSalgrade:"
+e.getMessage());
}
}
}

使用loadjava命令將其裝載到伺服器端並編譯

D:eclipse3.1workspacedbtest>loadjava-uscott/[email protected]

acleJavaProc.java

arguments:'-u''scott/[email protected]'-v''-resolve''OracleJavaProc.java'

creating:sourceOracleJavaProc

loading:sourceOracleJavaProc

resolving:sourceOracleJavaProc

查詢一下狀態:

連接到:
.2.0.1.0-Proction
WiththePartitioning,
JServerRelease9.2.0.1.0-Proction

SQL>SELECTobject_name,object_type,statusFROMuser_objectsWHEREobject_typeLIKE'JAVA%';

OBJECT_NAME
--------------------------------------------------------------------------------

OBJECT_TYPESTATUS
--------------------------------------------------
OracleJavaProc
JAVACLASSVALID

OracleJavaProc
JAVASOURCEVALID

測試一下存儲過程:

SQL>createorreplaceprocereadd_salgrade(idnumber,losalnumber,hisalnum
ber)aslanguagejavaname'OracleJavaProc.addSalGrade(int,int,int)';
2/

過程已創建。

SQL>setserveroutputonsize2000
SQL>calldbms_java.set_output(2000);

調用完成。

SQL>executeadd_salgrade(6,10000,15000);
...

PL/SQL過程已成功完成。

SQL>select*fromsalgradewheregrade=6;

GRADELOSALHISAL
------------------------------
61000015000
熱點內容
修羅雲伺服器 發布:2024-05-06 18:05:18 瀏覽:708
什麼電腦可以安裝安卓系統 發布:2024-05-06 18:05:15 瀏覽:776
金標頂配都有哪些配置 發布:2024-05-06 17:58:22 瀏覽:599
怎麼看配置高低是否換電腦 發布:2024-05-06 17:32:01 瀏覽:968
linux命令查看目錄 發布:2024-05-06 17:24:18 瀏覽:531
sqlvb 發布:2024-05-06 17:24:16 瀏覽:227
分鏡頭腳本軟體 發布:2024-05-06 17:22:54 瀏覽:824
華為手機百度的緩存如何清理 發布:2024-05-06 17:22:53 瀏覽:941
網投源碼 發布:2024-05-06 17:10:35 瀏覽:871
看門狗腳本 發布:2024-05-06 17:10:28 瀏覽:108