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时,会弹出错误消息。