導航:首頁 > 編程語言 > oracle函數調用java

oracle函數調用java

發布時間:2023-01-25 14:57:23

java 調用Oracle函數

是不是中文哇。你先用控制台連接oracle取數據看數據是不是正確顯示的。
dbCharset用的什麼字元集哇。。

System.out.println("str的值:"+new String(out_value.stringValue().getBytes("這里用和dbCharset一樣的字元集")));

❷ java調用oracle管道函數怎麼調用,求解

調用資料庫里的一個函數
一個函數本質上一個返回一個結果的存儲過程,這個例子示範了怎麼調用有in、out和in/out參數的函數***********************************/
CallableStatement cs;
try {
// 調用一個沒有參數的函數; 函數返回 a VARCHAR// 預處理callable語句
cs = connection.prepareCall("{? = call myfunc}");// 注冊返回值類型
cs.registerOutParameter(1, i);
// Execute and retrieve the returned valuecs.execute();
String retValue = cs.getString(1);
// 調用有一個in參數的函數; the function returns a VARCHARcs = connection.prepareCall("{? = call myfuncin(?)}");// Register the type of the return value
cs.registerOutParameter(1, Types.VARCHAR);// Set the value for the IN parameter
cs.setString(2, "a string");
// Execute and retrieve the returned valuecs.execute();
retValue = cs.getString(1);
// 調用有一個out參數的函數; the function returns a VARCHARcs = connection.prepareCall("{? = call myfuncout(?)}");// Register the types of the return value and OUT parametercs.registerOutParameter(1, Types.VARCHAR);cs.registerOutParameter(2, Types.VARCHAR);// Execute and retrieve the returned valuescs.execute();
retValue = cs.getString(1); // return valueString outParam = cs.getString(2); // OUT parameter// 調用有一個in/out參數的函數; the function returns a VARCHARcs = connection.prepareCall("{? = call myfuncinout(?)}");// Register the types of the return value and OUT parametercs.registerOutParameter(1, Types.VARCHAR);cs.registerOutParameter(2, Types.VARCHAR);// Set the value for the IN/OUT parametercs.setString(2, "a string");
// Execute and retrieve the returned valuescs.execute();
retValue = cs.getString(1); // return valueoutParam = cs.getString(2); // IN/OUT parameter} catch (SQLException e) {
}

❸ 高手速來幫忙!!oracle調用Java函數的問題!!

JAVA中Resultset是一個類 而不是一個方法。記住啊。結果集(ResultSet)是數據中查詢結果返回的一種對象,可以說結果集是一個存儲查詢結果的對象,但是結果集並不僅僅具有存儲的功能,他同時還具有操縱數據的功能,可能完成對數據的更新等。結果集讀取數據的方法主要是getXXX(),它的參數可以是整型,表示第幾列(是從1開始的),還可以是列名。返回的是對應的XXX類型的值。如果對應那列時空值,XXX是對象的話返回XXX型的空值,如果XXX是數字類型,如Float等則返回0,boolean返回false。使用getString()可以返回所有的列的值,不過返回的都是字元串類型的。XXX可以代表的類型有:基本的數據類型如整型(int),布爾型(Boolean),浮點型(Float,Double)等,比特型(byte),還包括一些特殊的類型,如:日期類型(java.sql.Date),時間類型(java.sql.Time),時間戳類型(java.sql.Timestamp),大數型(BigDecimal和BigInteger等)等。還可以使用getArray(int colindex/String columnname),通過這個方法獲得當前行中,colindex所在列的元素組成的對象的數組。使用getAsciiStream(int colindex/String colname)可以獲得該列對應的當前行的ascii流。也就是說所有的getXXX方法都是對當前行進行操作。結果集從其使用的特點上可以分為四類,這四類的結果集的所具備的特點都是和Statement語句的創建有關,因為結果集是通過Statement語句執行後產生的,所以可以說,結果集具備何種特點,完全決定於Statement,當然我是說下面要將的四個特點,在Statement創建時包括三種類型。首先是無參數類型的,他對應的就是下面要介紹的基本的ResultSet對應的Statement。下面的代碼中用到的Connection並沒有對其初始化,變數conn代表的就是Connection對應的對象。SqlStr代表的是響應的SQL語句。1、 最基本的ResultSet。之所以說是最基本的ResultSet是因為,這個ResultSet他起到的作用就是完成了查詢結果的存儲功能,而且只能讀去一次,不能夠來回的滾動讀取。這種結果集的創建方式如下: Statement st = conn.CreateStatementResultSet rs = Statement.excuteQuery(sqlStr);由於這種結果集不支持,滾動的讀去功能所以,如果獲得這樣一個結果集,只能使用它裡面的next()方法,逐個的讀去數據。 2 可滾動的ResultSet類型。這個類型支持前後滾動取得紀錄next()、previous(),回到第一行first(),同時還支持要去的ResultSet中的第幾行absolute(int n),以及移動到相對當前行的第幾行relative(int n),要實現這樣的ResultSet在創建Statement時用如下的方法。Statement st = conn.createStatement(int resultSetType, int resultSetConcurrency)ResultSet rs = st.executeQuery(sqlStr)其中兩個參數的意義是:resultSetType是設置ResultSet對象的類型可滾動,或者是不可滾動。取值如下: ResultSet.TYPE_FORWARD_ONLY只能向前滾動 ResultSet.TYPE_SCROLL_INSENSITIVE和Result.TYPE_SCROLL_SENSITIVE這兩個方法都能夠實現任意的前後滾動,使用各種移動的ResultSet指針的方法。二者的區別在於前者對於修改不敏感,而後者對於修改敏感。resultSetConcurency是設置ResultSet對象能夠修改的,取值如下: ResultSet.CONCUR_READ_ONLY 設置為只讀類型的參數。 ResultSet.CONCUR_UPDATABLE 設置為可修改類型的參數。所以如果只是想要可以滾動的類型的Result只要把Statement如下賦值就行了。Statement st = conn.createStatement(Result.TYPE_SCROLL_INSENITIVE, ResultSet.CONCUR_READ_ONLY);ResultSet rs = st.excuteQuery(sqlStr);用這個Statement執行的查詢語句得到的就是可滾動的ResultSet。3、 可更新的ResultSet這樣的ResultSet對象可以完成對資料庫中表的修改,但是我知道ResultSet只是相當於資料庫中表的視圖,所以並不時所有的ResultSet只要設置了可更新就能夠完成更新的,能夠完成更新的ResultSet的SQL語句必須要具備如下的屬性: a、只引用了單個表。 b、不含有join或者group by子句。 c、那些列中要包含主關鍵字。 具有上述條件的,可更新的ResultSet可以完成對數據的修改,可更新的結果集的創建方法是:Statement st = createstatement(Result.TYPE_SCROLL_INSENSITIVE,Result.CONCUR_UPDATABLE)4、 可保持的ResultSet正常情況下如果使用Statement執行完一個查詢,又去執行另一個查詢時這時候第一個查詢的結果集就會被關閉,也就是說,所有的Statement的查詢對應的結果集是一個,如果調用Connection的commit()方法也會關閉結果集。可保持性就是指當ResultSet的結果被提交時,是被關閉還是不被關閉。JDBC2.0和1.0提供的都是提交後ResultSet就會被關閉。不過在JDBC3.0中,我們可以設置ResultSet是否關閉。要完成這樣的ResultSet的對象的創建,要使用的Statement的創建要具有三個參數,這個Statement的創建方式也就是,我所說的Statement的第三種創建方式。如下:Statement st=createStatement(int resultsetscrollable,int resultsetupdateable,int resultsetSetHoldability)ResultSet rs = st.excuteQuery(sqlStr);前兩個參數和兩個參數的createStatement方法中的參數是完全相同的,這里只介紹第三個參數: resultSetHoldability表示在結果集提交後結果集是否打開,取值有兩個: ResultSet.HOLD_CURSORS_OVER_COMMIT:表示修改提交時,不關閉資料庫。 ResultSet.CLOSE_CURSORS_AT_COMMIT:表示修改提交時ResultSet關閉。

❹ java調用oracle函數

CREATE OR REPLACE FUNCTION COPY_PAPER (input_paper_id in number)

RETURN INTEGER -- return value type (0: error,1:)

IS
_paper_name VARCHAR(512);
_paper_id NUMBER(7) := 0;

BEGIN

BEGIN

SELECT PAPER_NAME INTO _paper_name
FROM test_paper
WHERE paper_id = input_paper_id;

select seq_paper.nextval into _paper_id from al;

INSERT INTO test_paper (paper_id, paper_name) values (_paper_id, _paper_name);

EXCEPTION
WHEN OTHERS THEN

ROLLBACK;

RETURN(0);

END;

DECLARE CURSOR _question_cur IS
SELECT content
FROM question
WHERE PAPER_ID = input_paper_id;

BEGIN

FOR RC_RECORD IN _question_cur LOOP

IF RC_RECORD.content IS NULL THEN

BEGIN

ROLLBACK;

RETURN(1);

END;

ELSE

INSERT INTO question (q_id, paper_id, content) VALUES (seq_question.nextval, _paper_id , RC_RECORD.content);

END IF;

END LOOP;

commit;
return(1);

EXCEPTION
WHEN OTHERS THEN

ROLLBACK;

RETURN(0);

END;

EXCEPTION
WHEN OTHERS THEN

ROLLBACK;

RETURN(0);

END;

❺ oracle觸發器調用一個Java類

把JAVA程序LOAD進oracle

在$ORACLE_HOME/bin目錄下有個LOADJAVA命令,使用這個命令將剛寫好的JAVA程序LOAD進資料庫。

loadjava -user test/test@test -o -v -f -r Main.java

如果成功的話,會列印出來信息提示成功,若程序有編譯錯誤的話,也會提示你錯誤的地方。

3。修改許可權

因為我的這個JAVA程序里涉及到對文件的讀寫操作,所以要先修改許可權。

首先以管理員身份登錄進資料庫

sqlplus / as sysdba

然後執行

begin

dbms_java.grant_permission('TEST','SYS:java.io.FilePermission','/var/spool/cron/oracle','read,write,execute,delete');

end;

/

執行完畢後,在資料庫里執行上述JAVA程序時,就擁有讀寫該文件的許可權了。

4。創建存儲過程

進入到資料庫,我是在SQLPLUS命令行

create or replace procere Modify(name varchar2) as language java name 'Main.modify(java.lang.String)';

/

會提示創建存儲過程成功。

5。增加trigger

我是在TOAD里直接針對某個表增加trigger,所以我只寫出關鍵部分的代碼

begin

if :old.name = 'time' then

Modify(:new.value);

end if;

end;

至此,在ORACLE的trigger里調用JAVA程序就完成了,後來的實驗證明,每當更新這個表時,都確實執行了該JAVA程序,完成了對文件的讀寫。

閱讀全文

與oracle函數調用java相關的資料

熱點內容
鋁膜構造柱要設置加密區嗎 瀏覽:342
考駕照怎麼找伺服器 瀏覽:882
阿里雲伺服器如何更換地區 瀏覽:970
手機app調音器怎麼調古箏 瀏覽:501
銳起無盤系統在伺服器上需要設置什麼嗎 瀏覽:17
紅旗計程車app怎麼應聘 瀏覽:978
如何編寫linux程序 瀏覽:870
吉利車解壓 瀏覽:248
java輸入流字元串 瀏覽:341
安卓軟體沒網怎麼回事 瀏覽:785
dvd壓縮碟怎麼導出電腦 瀏覽:274
冒險島什麼伺服器好玩 瀏覽:541
如何在伺服器上做性能測試 瀏覽:793
命令序列錯 瀏覽:259
javaif的條件表達式 瀏覽:576
手機app上傳的照片怎麼找 瀏覽:531
雲伺服器面臨哪些威脅 瀏覽:748
c語言各種編譯特點 瀏覽:177
路由器多種加密方法 瀏覽:604
程序員阻止電腦自動彈出定位 瀏覽:169