2015-10-30 2 views
0

Это мой код, где METHODARGDATATYPE_VARRAY - это разновидность в пятом столбце моей таблицы, а первый столбец имеет автогенерированную последовательность, объединенную с 't'.Вставить значения в таблицу с помощью конкатенации и Varray

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) 

мои tablescripts являются:

 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 ; 
+0

, но после того, как эти изменения я получаю сообщение об ошибке как указано ниже: ORA-12899: значение слишком велико для столбца «ER706221». «TESTCASEIDDETAILS». «METHODREPLACEMENT» (актуально: 10, максимум: 2) –

ответ

1

Измените следующие

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

в

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

сейчас я получаю другие ошибки: –

+0

Я отредактировал вопрос, могу ли проверить его –

+0

@NagaumadeviPalaparthy, пожалуйста, не меняйте вопрос, иначе мудрый мой ответ будет недействительным. Сохраните исходный вопрос и отправьте еще один вопрос для своей новой проблемы. – SpringLearner

3

Индексы должны соответствовать показателям знака вопроса заполнители в подготовленном заявлении, не к номерам столбцов в таблице. Индекс первого вопросительного знака равен 1, второй - 2 и т. Д. Ваши показатели отключатся все по одному, должно быть 1 2 3 4 вместо 2 3 4 5.

+0

, но после этих изменений я получаю ошибку, как показано ниже: ORA-12899: значение тоже большой для столбца "ER706221". "TESTCASEIDDETAILS". "METHODREPLACEMENT" (актуально: 10, максимум: 2) –

+0

Проверьте значение 'testCaseIDandDetailsBean.getMethodReplacement()'. Кажется, что значение не то, что вы ожидаете: строка длины 10 – janos