这是发牌人表的代码,它可以正常工作。
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();
答案 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
。
没有表定义,很难说出问题出在哪里。