Java 使用连接和Varray将值插入表中

Java 使用连接和Varray将值插入表中,java,sql,jdbc,Java,Sql,Jdbc,这是我的代码,其中METHODARGDATATYPE_VARRAY是表中第5列的一个VARRAY,并且第一列自动生成了与“t”连接的序列 String arrayElements[] = { "Test3", "Test4" }; ArrayDescriptor desc = ArrayDescriptor.createDescriptor ("METHODARGDATATYPE_VARRAY", conn)

这是我的代码,其中METHODARGDATATYPE_VARRAY是表中第5列的一个VARRAY,并且第一列自动生成了与“t”连接的序列

 String arrayElements[] = { "Test3", "Test4" };
   ArrayDescriptor desc = ArrayDescriptor.createDescriptor
                                        ("METHODARGDATATYPE_VARRAY", conn);
   ARRAY newArray = new ARRAY(desc, conn, arrayElements);

   String sql="insert into TestCaseIDDetails values (concat('t',TestCaseID_sequence.nextval),?,?,?,?)";
   PreparedStatement ps =
     conn.prepareStatement (sql);
   ps.setString(2,testCaseIDandDetailsBean.getClass_name()) ;
   ps.setString(3,testCaseIDandDetailsBean.getMethod_name()) ;
   ps.setString(4,testCaseIDandDetailsBean.getMethodReplacement()) ;
   ((OraclePreparedStatement)ps).setARRAY (5, newArray);

   ps.execute ();
Iam试图执行此代码,但再次出现如下错误:

      java.sql.SQLException: Invalid column index
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
at oracle.jdbc.driver.OraclePreparedStatement.setARRAYInternal(OraclePreparedStatement.java:5906)
at oracle.jdbc.driver.OraclePreparedStatement.setARRAY(OraclePreparedStatement.java:5898)
at implementation.TestCaseIDandDetailsDAOImpl.addTestCaseIDandDetails(TestCaseIDandDetailsDAOImpl.java:54)
at implementation.TestCaseIDandDetailsDAOImpl.main(TestCaseIDandDetailsDAOImpl.java:134)
我的表脚本是:

     CREATE or replace TYPE METHODARGDATATYPE_VARRAY AS VARRAY(20) OF varchar2(30);
     create table TestCaseIDDetails(
       testcaseID varchar2(20) primary key,
       classname varchar2(20) not null,
       methodname varchar2(20) not null,
       MethodReplacement char(2) check(MethodReplacement in ('y','n')),
       MethodArgDataType METHODARGDATATYPE_VARRAY);

     Create sequence TestCaseID_sequence minvalue 1 start with 1 increment by 1 ;

索引应与准备好的语句中问号占位符的索引相对应,而不是与表中的列号相对应。第一个问号的索引是1,第二个是2,依此类推。您的索引都被1关闭,应该是1 2 3 4,而不是2 3 4 5。

索引应该对应于准备好的语句中问号占位符的索引,而不是表中的列号。第一个问号的索引是1,第二个是2,依此类推。您的索引都被1关闭,应该是1 2 3 4而不是2 3 4 5。

更改以下内容

ps.setString(2,testCaseIDandDetailsBean.getClass_name()) ;
   ps.setString(3,testCaseIDandDetailsBean.getMethod_name()) ;
   ps.setString(4,testCaseIDandDetailsBean.getMethodReplacement()) ;
   ((OraclePreparedStatement)ps).setARRAY (5, newArray);

更改以下内容

ps.setString(2,testCaseIDandDetailsBean.getClass_name()) ;
   ps.setString(3,testCaseIDandDetailsBean.getMethod_name()) ;
   ps.setString(4,testCaseIDandDetailsBean.getMethodReplacement()) ;
   ((OraclePreparedStatement)ps).setARRAY (5, newArray);


@NagaumadeviPalaparthy请不要改变这个问题,否则我的答案将是无效的。保留原始问题,并针对新问题发布另一个问题。我已将其放回原始问题,但经过这些修改后,我发现错误如下:ORA-12899:对于列“ER706221”“TESTCASEIDDETAILS”“METHODREPLACEMENT”(实际值:10,最大值:2)@Nagaumadevipalarty早些时候你的错误是不同的,这次你的错误是不同的。这意味着这是一个不同的问题是的,这是一个不同的问题,但我要在3小时后才能发布,我需要立即发布。你能帮我吗?/@Nagaumadevipalathy请不要更改问题,否则我的答案将无效。保留原始问题,并针对新问题发布另一个问题。我已将其放回原始问题,但经过这些修改后,我发现错误如下:ORA-12899:对于列“ER706221”“TESTCASEIDDETAILS”“METHODREPLACEMENT”(实际值:10,最大值:2)@Nagaumadevipalarty早些时候你的错误是不同的,这次你的错误是不同的。这意味着这是一个不同的问题。是的,这是一个不同的问题,但我要在3小时后才能发布,我需要立即发布。你能帮我吗?/但是经过这些修改后,我得到了如下错误:ORA-12899:值太大,无法容纳列“ER706221”。“TESTCASEIDDETAILS”。“METHODREPLACEMENT”(实际值:10,最大值:2)验证testCaseIDandDetailsBean.getMethodReplacement()的值。。值似乎不是您期望的值:一个长度为10的字符串,但经过这些修改后,我得到的错误如下:ORA-12899:值对于列“ER706221”“TESTCASEIDDETAILS”“METHODREPLACEMENT”(实际值:10,最大值:2)太大,请验证
testCaseIDandDetailsBean.getMethodReplacement()
的值。值似乎不是您所期望的:一个长度为10的字符串,但经过这些修改后,我得到的错误如下:ORA-12899:值对于列“ER706221”、“TESTCASEIDDETAILS”、“METHODREPLACEMENT”(实际值:10,最大值:2)太大,但在这些修改后,我得到的错误如下:ORA-12899:值对于列“ER706221”太大。“TESTCASEIDDETAILS”“METHODREPLACEMENT”(实际值:10,最大值:2)