执行PreparedStatement时出现ORA-01722错误

时间:2020-05-05 14:08:24

标签: java database oracle

这是发牌人表的代码,它可以正常工作。

 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表应用了相同的方法,但是在执行prepstmt1.execute()时发生ORA-01722错误。有什么不同 ?我无法找出问题所在。我只是尝试读取通过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 个答案:

答案 0 :(得分:1)

ORA-01722是在您执行试图将字符串转换为数字但未成功的SQL语句时发生的。

从本质上讲,这可能是现有数据中的某些错误,而不是您粘贴的代码中的某些错误。对TC_ID执行以下查询可以帮助您找出罪魁祸首。

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

解决此错误的理想方法是在后端和数据库层对齐数据类型。

答案 1 :(得分:0)

错误代码ORA-01722表示invalid number
提示:
当您尝试将字符串转换为数字时,会发生此错误。您可能在数据库中的数字字段上输入了setString

没有表定义,很难说出问题出在哪里。

相关问题