Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.ClassCastException:无法将oracle.sql.NUMBER转换为oracle.sql.CHAR_Java - Fatal编程技术网

java.lang.ClassCastException:无法将oracle.sql.NUMBER转换为oracle.sql.CHAR

java.lang.ClassCastException:无法将oracle.sql.NUMBER转换为oracle.sql.CHAR,java,Java,在数据库中,有一个集合: CREATE OR REPLACE TYPE TY_Test as object ( ID NUMBER, ACCOUNT NUMBER, PRIORITY CHAR(20), ) CREATE OR REPLACE TYPE TY_Test_Instance as table of TY_Test 而TY_Test_实例被传递给一个过程 下面是Java代码: public static void main(String[] args) throws Exce

在数据库中,有一个集合:

CREATE OR REPLACE TYPE TY_Test as object
(
ID  NUMBER,
ACCOUNT  NUMBER,
PRIORITY CHAR(20), 
)

CREATE OR REPLACE TYPE TY_Test_Instance as table of TY_Test
而TY_Test_实例被传递给一个过程

下面是Java代码:

public static void main(String[] args) throws Exception {
    List<Object> list = new ArrayList<Object>();
    String[] objs = new String[3];
    objs[0] = new String("863");
    objs[1] = new String("1");
    objs[2] = new String("3");
    Connection conn = DBHelper.getInstance().conn;
    StructDescriptor sDescriptor = StructDescriptor.createDescriptor("TY_Test", conn);
    list.add(new STRUCT(sDescriptor, conn, objs));
    Object[] obj_array = list.toArray();
    ArrayDescriptor aDescriptor = ArrayDescriptor.createDescriptor("TY_Test_Instance", conn);
    ARRAY array = new ARRAY(aDescriptor, conn, obj_array);
    CallableStatement cstm = conn.prepareCall("{call PR_TEST(?,?)}");
    cstm.setInt(1, 123);
    cstm.setArray(2, array);
    cstm.registerOutParameter(1, Types.INTEGER);
    cstm.execute();
    if (cstm.getInt(1) != 0) {
        System.out.println("done");
    }
}
publicstaticvoidmain(字符串[]args)引发异常{
列表=新的ArrayList();
String[]objs=新字符串[3];
objs[0]=新字符串(“863”);
objs[1]=新字符串(“1”);
objs[2]=新字符串(“3”);
连接conn=DBHelper.getInstance().conn;
StructDescriptor=StructDescriptor.createDescriptor(“TY_测试”,康涅狄格州);
添加(新结构(sDescriptor、conn、objs));
Object[]obj_array=list.toArray();
ArrayDescriptor aDescriptor=ArrayDescriptor.createDescriptor(“TY_测试_实例”,康涅狄格州);
阵列=新阵列(aDescriptor、conn、obj_阵列);
CallableStatement cstm=conn.prepareCall({call PR_TEST(?)});
cstm.setInt(1123);
cstm.setArray(2,array);
registerOutParameter(1,Types.INTEGER);
cstm.execute();
如果(cstm.getInt(1)!=0){
系统输出打印项次(“完成”);
}
}
执行脚本时,会弹出
java.lang.ClassCastException:在cstm.setArray(2,array)的代码中,oracle.sql.NUMBER不能强制转换为oracle.sql.CHAR


我花了很多时间,但没有找到任何解决办法。请提供帮助。

请在此添加
PR\u测试程序的代码。
测试定义为数字。数字,CHAR(20),但objs包含字符串。尝试传递整数、整数、字符串。您好,谢谢您的评论。问题是我没有更改变量类型的权限。必须将其用作字符。知道如何处理吗?我写了关于java部分的文章:objs[0]=newinteger(863);etcobjs[0]=新整数(863),可以。对于objs[2]=新字符串(“3”),oracle将其视为数字。因为集合中定义的变量是char,所以当代码将其转换为char时,会弹出错误消息。