第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Oracle Java:將 java.sql.Blob 數(shù)據(jù)類(lèi)型轉(zhuǎn)換為 Oracle BLOB

Oracle Java:將 java.sql.Blob 數(shù)據(jù)類(lèi)型轉(zhuǎn)換為 Oracle BLOB

大話西游666 2022-06-04 11:06:50
在執(zhí)行接受并返回 BLOB 數(shù)據(jù)的 Oracle Java 過(guò)程時(shí),我收到以下錯(cuò)誤,錯(cuò)誤報(bào)告 - ORA-00932:不一致的數(shù)據(jù)類(lèi)型:預(yù)期返回值是可轉(zhuǎn)換為 Oracle 類(lèi)型的用戶(hù)定義 Java 類(lèi)的實(shí)例,得到一個(gè)無(wú)法轉(zhuǎn)換的對(duì)象 ORA-06512:在“”,第 86 行 ORA- 06512:在第 7 行 00932.00000 -“不一致的數(shù)據(jù)類(lèi)型:預(yù)期的 %s 得到了 %s”*原因:*操作:Java 代碼public static java.sql.Blob Convert_Image(java.sql.Blob srcBlob) {java.sql.Blob desBlob = null;try {    Document document = new Document();    ByteArrayOutputStream pdfDocumentOutputStream = new ByteArrayOutputStream();    PdfWriter pdfDocumentWriter = PdfWriter.getInstance(document, pdfDocumentOutputStream);                            document.open();    if (document.newPage()) {        int indentation = 0;        Image img = Image.getInstance(srcBlob.getBytes(1, (int) srcBlob.length()));        float scaler = document.getPageSize().getWidth() - document.leftMargin() - document.rightMargin() - indentation;        img.scalePercent((scaler / img.getWidth()) * 100);        document.newPage();        document.add(Image.getInstance(img));        document.close();        desBlob = new SerialBlob(pdfDocumentOutputStream.toByteArray());        pdfDocumentWriter.close();        pdfDocumentOutputStream.close();    }   }catch (Exception e) {    Show_Message(e);}return desBlob;}甲骨文代碼FUNCTION CONVERT_IMAGE(    P_BLOB IN DOCUMENTS.BLOB_CONTENT%TYPE)  RETURN BLOBAS  LANGUAGE JAVA NAME 'egift.Util.Convert_Image (java.sql.Blob) return java.sql.Blob';  觸發(fā)器實(shí)現(xiàn)...DECLARE    v_blob_content DOCUMENTS.BLOB_CONTENT%TYPE;
查看完整描述

3 回答

?
瀟瀟雨雨

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊

這是我實(shí)施的臨時(shí)解決方案,因?yàn)槲医咏刂谷掌冢胰栽趯ふ乙粋€(gè)解決方案,其中我不必使用不推薦使用的類(lèi),并且希望避免引用 oracle.sql.BLOB 并使用 java .sql.Blob。


解決方法涉及創(chuàng)建一個(gè) oracle.sql.BLOB 對(duì)象而不是 SerialBlob,然后從輸出流中填充 bytearray,如下所示,


conn = new OracleDriver().defaultConnection();

desBlob = BLOB.createTemporary(conn, false, BLOB.DURATION_SESSION);

desBlob.setBytes(1, pdfDocumentOutputStream.toByteArray());

并使用抑制棄用警告,


@SuppressWarnings("deprecation")

最終的 Java 代碼


@SuppressWarnings("deprecation")

public static java.sql.Blob Convert_Image(java.sql.Blob srcBlob) {


    java.sql.Blob desBlob = null;


    try {

        Document document = new Document();


        ByteArrayOutputStream pdfDocumentOutputStream = new ByteArrayOutputStream();

        PdfWriter pdfDocumentWriter = PdfWriter.getInstance(document, pdfDocumentOutputStream);

        document.open();


        if (document.newPage()) {


            int indentation = 0;

            Image img = Image.getInstance(srcBlob.getBytes(1, (int) srcBlob.length()));

            float scaler =

                document.getPageSize().getWidth() - document.leftMargin() - document.rightMargin() - indentation;

            img.scalePercent((scaler / img.getWidth()) * 100);


            document.newPage();

            document.add(Image.getInstance(img));

            document.close();


            //desBlob = new SerialBlob(pdfDocumentOutputStream.toByteArray());

            conn = new OracleDriver().defaultConnection();

            desBlob = BLOB.createTemporary(conn, false, BLOB.DURATION_SESSION);

            desBlob.setBytes(1, pdfDocumentOutputStream.toByteArray());


            pdfDocumentWriter.close();

            pdfDocumentOutputStream.close();


        }

    } catch (Exception e) {

        Show_Message(e);

    }

    return desBlob;


}

我已經(jīng)設(shè)置了一個(gè)賞金來(lái)獲得一個(gè)解決方案來(lái)解決這個(gè)問(wèn)題而不使用不推薦使用的類(lèi),但我找不到一個(gè),盡管我收到了對(duì)這個(gè)問(wèn)題的關(guān)注。在我找到正確的解決方案之前,這對(duì)我來(lái)說(shuō)是一個(gè)懸而未決的問(wèn)題。感謝所有努力的人。


查看完整回答
反對(duì) 回復(fù) 2022-06-04
?
拉莫斯之舞

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊

我找到了這個(gè)沒(méi)有棄用代碼的解決方案:


    public static Blob bytes2Blob(byte[] b) throws Exception {

        if (System.getProperty("oracle.server.version") != null) {

            Connection con = DriverManager.getConnection("jdbc:default:connection");

            CallableStatement cStmt = con.prepareCall ("{ call DBMS_LOB.createtemporary(?,true,DBMS_LOB.SESSION) }");

            cStmt.registerOutParameter(1, OracleTypes.BLOB);

            cStmt.execute();

            Blob blob = ((OracleCallableStatement)cStmt).getBLOB(1);

            cStmt.close();

            OutputStream out = blob.setBinaryStream(1L);

            out.write(b);

            out.flush();

            return blob;

        } else {

            return new javax.sql.rowset.serial.SerialBlob(b);

        }


查看完整回答
反對(duì) 回復(fù) 2022-06-04
?
喵喵時(shí)光機(jī)

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊

您需要返回 Java 過(guò)程的實(shí)例oracle.sql.BLOB或oracle.jdbc2.Blob從 Java 過(guò)程返回實(shí)例,以創(chuàng)建調(diào)用 Java 過(guò)程并返回 BLOB 的觸發(fā)器。ORACLE 實(shí)際上有一個(gè)表,他們將數(shù)據(jù)類(lèi)型與他們可以接受的 Java 實(shí)例進(jìn)行比較:


合法的數(shù)據(jù)類(lèi)型映射。Oracle 數(shù)據(jù)庫(kù)自動(dòng)在 SQL 類(lèi)型和 Java 類(lèi)之間進(jìn)行轉(zhuǎn)換


更新 1:我實(shí)際上測(cè)試了傳遞 java.sql.Blob 并在函數(shù)中返回相同的類(lèi)型,它按預(yù)期工作:


CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "Util" as

public class Util {

  public static java.sql.Blob Convert_Image(java.sql.Blob srcBlob) {


    return srcBlob;


    }

}

/


CREATE OR REPLACE FUNCTION CONVERT_IMAGE(

    P_BLOB BLOB)

  RETURN BLOB

AS

  LANGUAGE JAVA NAME 'Util.Convert_Image (java.sql.Blob) return java.sql.Blob';



select utl_raw.cast_to_varchar2(convert_image(utl_raw.cast_to_raw('test'))) from dual;

-- test

你可以嘗試運(yùn)行上面的代碼,看看你是否得到同樣的錯(cuò)誤?


查看完整回答
反對(duì) 回復(fù) 2022-06-04
  • 3 回答
  • 0 關(guān)注
  • 429 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)