相关疑难解决方法(0)

将数组传递给oracle程序

我想从java发送两个数组到oracle存储过程.第一个数组是字符串数组,第二个是字符数组,我该如何制作?

java oracle stored-procedures

11
推荐指数
1
解决办法
4万
查看次数

如何修复已弃用的oracle.sql.ArrayDescriptor,oracle.sql.STRUCT和oracle.sql.StructDescriptor

我使用下面的JDBC代码来调用一个带有Array输入的Oracle存储过程.

但是以下三个类已被弃用.如何更换?

import oracle.sql.ArrayDescriptor;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;
Run Code Online (Sandbox Code Playgroud)

Java代码

        Object[] reportArray = new Object[3]; 
        STRUCT[] struct = new STRUCT[reports.size()];

        ArrayDescriptor arrayDescriptor = new ArrayDescriptor(new SQLName("T_REPORT_TABLE", (OracleConnection) connection), connection);
        StructDescriptor structDescriptor = StructDescriptor.createDescriptor("R_REPORT_OBJECT", connection);

        int arrayIndex = 0;
        for (Report data : reports) {
            reportArray[0] = data.getXXX();
            reportArray[1] = data.getYYY();
            reportArray[2] = data.getZZZ();

            struct[arrayIndex++] = new STRUCT(structDescriptor, connection, reportArray);
        }

        oracle.sql.ARRAY reportsArray = new oracle.sql.ARRAY(arrayDescriptor, connection, struct);
        callableStatement.setArray("T_REPORT_IN", reportsArray);

        callableStatement.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

java oracle stored-procedures deprecated

7
推荐指数
2
解决办法
2万
查看次数

尝试将数组传递给预准备语句时,Oracle jdbc"createArray"会抛出"不支持的功能"异常

我试图通过createArrayOf将数组传递给我准备好的语句

val prep: PreparedStatement = con.prepareStatement("select * from SOA_WEB_USER.VOPEX where CMF_PPK_NBR in (?)")

val array :Array[Object]=Array("1165006001","1165006002")

val sqlArray = con.createArrayOf("VARCHAR",array) //getting the exception here 

prep.setArray(1,sqlArray)

val rs = prep.executeQuery()

while (rs.next()) {

    println(rs.getObject(1))

}
Run Code Online (Sandbox Code Playgroud)

但createArrayOf方法抛出一个错误说

Exception  thread "main" java.sql.SQLFeatureNotSupportedException:Unsupported feature   
at Oracle.jdbc.driver.PhysicalConnection.createArrayOf(PhysicalConnection.java:8707)
at com.testpackage.Main$.main(Main.scala:109)
at com.testpackage.Main.main(Main.scala)    
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)     
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Run Code Online (Sandbox Code Playgroud)

我正在使用ojdbc7.jar进行jdbc连接.有什么我可以采取不同的方式将数组传递给准备好的语句吗?

java oracle scala jdbc

7
推荐指数
3
解决办法
1万
查看次数

如何将数组从Java返回到PL/SQL?

从PL/SQL到Java来回传递数字和字符串没有问题,但是如何传递数组呢?我从PL/SQL调用Java - 而不是其他方式.

下面是一个get_widgets_as_string按预期工作的示例.如何编写PL/SQL 调用规范,so19j.get_widgets_as_array()以便我可以从PL/SQL调用它?

我已经阅读了发布带有调用规范的Java类,我可以看到嵌套表对应oracle.sql.ARRAY,但我无法使其工作.我可能错过了一些微不足道的细节,因为我不是Java程序员.

create or replace and compile java source named "so19j" as

import java.lang.*;

public class so19j {
    public static String get_widgets_as_string() {
        String widgets = "foo;bar;zoo";
        return widgets;
    }

    public static String[] get_widgets_as_array() {
        String[] widgets = new String[]{"foo", "bar", "zoo"};
        return widgets;
    }
};
/
show errors java source "so19j"

create or replace function get_widgets_as_string return varchar2 as
language java name 'so19j.get_widgets_as_string() return …
Run Code Online (Sandbox Code Playgroud)

java oracle plsql oracle11g

5
推荐指数
1
解决办法
6256
查看次数

使用 ARRAY 输入参数执行 Oracle 存储过程

由于oracle.sql.ArrayDescriptor,oracle.sql.STRUCT和oracle.sql.StructDescriptor已弃用,我正在使用java.sql.Array和从 Java 调用 Oracle 存储过程java.sql.Struct。

我用这个问题作为参考

这是我的代码。

import java.sql.Array;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Struct;
import java.util.Map;

import javax.naming.InitialContext;
import javax.sql.DataSource;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
import org.springframework.stereotype.Repository;

import oracle.jdbc.OracleTypes;
import oracle.jdbc.OracleConnection;

public CrearRelacionArbolResponseBean crearRelacionArbol(String mensajeTransaccion,
            CrearRelacionArbolRequestBean request) throws DBException {
        DataSource sgaDS;
        CrearRelacionArbolResponseBean objResponse = new CrearRelacionArbolResponseBean();

        Connection conn = null;

        try {
            InitialContext ctx = new InitialContext(); …
Run Code Online (Sandbox Code Playgroud)

arrays java-8 weblogic12c oracle12c spring-boot

5
推荐指数
1
解决办法
627
查看次数