Ошибка ORA-01722 при выполнении PreparedStatement - PullRequest
0 голосов
/ 05 мая 2020

это код для таблицы дилеров, и он работает правильно.

 Class.forName("oracle.jdbc.OracleDriver");
       Connection conn =  DriverManager.getConnection("jdbc:oracle:thin:@172.31.70.51:1521:TSTSLSDB", "BIOSIGN","BIOSIGN123*");
       String sqlQuery = "INSERT INTO DEALER (ID,NAME,DEALER_CODE,BRANCH_CODE,ADDRESS,PHONE_NUMBER,TAX_OFFICE_NAME,TAX_NUMBER,EMAIL,CITY_NAME)"
                  + "VALUES(?,?,?,?,?,?,?,?,?,?)";
       PreparedStatement prepstmt = conn.prepareStatement(sqlQuery);
       ThreadLocalRandom random = ThreadLocalRandom.current();
       long x = random.nextLong(10_000_000_000L, 100_000_000_000L);
       prepstmt.setLong(1,x);
       prepstmt.setString(2,"HACI");
       prepstmt.setString(3,"K000003");
       prepstmt.setString(4,"01");
       prepstmt.setString(5,"TARLABAŞI Çilek Sokak");
       prepstmt.setString(6,"2482333283");
       prepstmt.setNull(7,java.sql.Types.NULL );
       prepstmt.setNull(8,java.sql.Types.NULL );
       prepstmt.setNull(9,java.sql.Types.NULL );
       prepstmt.setNull(10,java.sql.Types.NULL );
       prepstmt.execute();
       PreparedStatement prepstmt2 =conn.prepareStatement("SELECT * from dealer where id=?");
       prepstmt2.setLong(1,x);
       prepstmt2.execute();

и я применяю тот же подход для таблицы MERNIS_CUSTOMER_INFO, но ошибка ORA-01722 возникает при выполнении Prepstmt1.execute (). Какая разница ? Я не могу понять проблему. Я просто пытаюсь прочитать запись, вставленную через Prepstmt.

 Class.forName("oracle.jdbc.OracleDriver");
   Connection conn =  DriverManager.getConnection("jdbc:oracle:thin:@172.31.60.83:1521:TBCEBTRL", "TESTUSER","TESTUSER");
   String sqlQuery = "INSERT INTO PROVISIONING_MGNT.MERNIS_CUSTOMER_INFO (TC_ID,MOTHER_TC_ID,FATHER_TC_ID,BIRTHPLACE_CODE,SPOUSE_TC_ID,NAME,SURNAME,SEX,FATHER_NAME,MOTHER_NAME,DATE_OF_BIRTH_YEAR,DATE_OF_BIRTH_MONTH,DATE_OF_BIRTH_DAY,PLACE_OF_BIRTH,STATUS,MARITAL_STATUS,RELIGION,DATE_OF_DEATH_YEAR,DATE_OF_DEATH_MONTH,DATE_OF_DEATH_DAY,PROVINCE_CODE,PROVINCE_NAME,COUNTY_CODE,COUNTY_NAME,VOLUME_CODE,VOLUME_NAME,FAMILY_SEQUENCE_NUMBER,PERSON_SEQUENCE_NUMBER,ERROR_CODE,ERROR_DESCRIPTION,CREATION_TIME,DOCUMENT_NO)"
                      +"VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
 PreparedStatement prepstmt = conn.prepareStatement(sqlQuery);
  // Statement prepstmt = conn.createStatement();
   Random r = new Random();
   int number = 1000000000 + (int)(r.nextDouble() * 999999999);
  ThreadLocalRandom random = ThreadLocalRandom.current();
  long x = random.nextLong(10_000_000_000L, 100_000_000_000L);
  System.out.println(x);
   prepstmt.setLong(1,x);
   prepstmt.setNull(2,java.sql.Types.NULL );
   prepstmt.setNull(3,java.sql.Types.NULL );
   prepstmt.setInt(4,1542);
   prepstmt.setNull(5,java.sql.Types.NULL );
   prepstmt.setString(6,"TESTxx");
   prepstmt.setString(7,"TEST");
   prepstmt.setString(8,"Male");
   prepstmt.setString(9,"FATHER");
   prepstmt.setString(10,"Mother");
   prepstmt.setInt(11,1968);
   prepstmt.setInt(12,10);
   prepstmt.setInt(13,10);
   prepstmt.setString(14,"ADANA");
   prepstmt.setString(15,"Open");
   prepstmt.setString(16,"Single");
   prepstmt.setNull(17,java.sql.Types.NULL );
   prepstmt.setNull(18,java.sql.Types.NULL );
   prepstmt.setNull(19,java.sql.Types.NULL );
   prepstmt.setNull(20,java.sql.Types.NULL );
   prepstmt.setInt(21,1);
   prepstmt.setString(22,"ADANA");
   prepstmt.setInt(23,1101);
   prepstmt.setString(24,"TEST");
   prepstmt.setInt(25,1);
   prepstmt.setString(26,"MERKEZ");
   prepstmt.setInt(27,39);
   prepstmt.setInt(28,2);
   prepstmt.setNull(29,java.sql.Types.NULL );
   prepstmt.setNull(30,java.sql.Types.NULL );
   prepstmt.setNull(31,java.sql.Types.NULL );
   prepstmt.setInt(32,number);
   prepstmt.execute();
   PreparedStatement prepstmt1 =conn.prepareStatement("SELECT * from PROVISIONING_MGNT.MERNIS_CUSTOMER_INFO where TC_ID=?");
   prepstmt1.setLong(1,x);
   prepstmt1.execute();

Ответы [ 2 ]

1 голос
/ 05 мая 2020

ORA-01722 возникает, когда вы выполнили оператор SQL, который пытался преобразовать строку в число, но это было безуспешно.

По сути, это может быть что-то не так в существующих данных, а не в вставленном вами коде . Выполнение указанного ниже запроса к TC_ID может помочь вам определить виновника.

SELECT * 
FROM PROVISIONING_MGNT.MERNIS_CUSTOMER_INFO
WHERE NOT REGEXP_LIKE(TC_ID, '^-?[0-9]+(\.[0-9]+)?$');

Идеальный способ устранить эту ошибку - выровнять типы данных на уровне серверной части и базы данных.

0 голосов
/ 05 мая 2020

Код ошибки ORA-01722 означает invalid number
Советы:
Эта ошибка возникает при попытке преобразовать строку в число. Вероятно, вы добавили setString к числовому полю в своей базе данных.

Без определения вашей таблицы трудно сказать, где именно проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...