2015-06-25 3 views
2

Хороший день,Как проверить, какой столбец вызывает ошибку db2 22001?

org.springframework.dao.DataIntegrityViolationException: could not insert: [com.entity.payment.BillPaymentItem]; SQL [insert into smeadm.PaymentHistoryItem (amount, beneficiaryAccNo, beneficiaryBankCode, beneficiaryBankName, beneficiaryRef2, billCode, branchId, chargeTo, cibRefNo, cifId, collectionAccountNo, companyId, companyName, createdHostDateTime, currentStatus, customerCategoryCharges, customerCategoryCode, customerCategoryId, customerCategoryName, description, errorCode, errorMessage, fromAccountName, fromAccountNo, fromAccountType, fromFavourite, gst, gstAmount, gstInclusive, gstName, gstRate, gstRefNo, gstTaxCode, hostRefNo, nbpsBillerCode, nbpsBillerName, nbpsReferenceNo, nbpsRrn2, nbpsRtn, nbpsSystemReferenceNo, notifyRetryCount, paymentDate, paymentHistoryId, processDate, promotionCharges, promotionCode, promotionId, promotionName, ref1, ref2, reference, rejectReason, remittanceStatus, remittanceTo, rfi, rrnInfo, rtTrxCode, rtnStatus, serviceCharge, serviceChargeCode, serviceChargeGLAcct, serviceChargeId, serviceChargeName, servicePackageCode, servicePackageId, servicePackageName, serviceType, showTerm, smsCharges, smsGst, smsGstAmount, smsGstInclusive, smsGstRate, smsGstTaxCode, toAccountName, toAccountNo, toAccountType, transferType, type, validateSig, approvalItemId) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]; nested exception is org.hibernate.exception.DataException: could not insert: [com.entity.payment.BillPaymentItem] 
    at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:642) ~[org.springframework.orm-3.0.4.RELEASE.jar:3.0.4.RELEASE] 


Caused by: com.ibm.db2.jcc.am.SqlDataException: DB2 SQL Error: SQLCODE=-302, SQLSTATE=22001, SQLERRMC=null, DRIVER=3.63.123 
    at com.ibm.db2.jcc.am.fd.a(fd.java:671) ~[db2jcc.jar:na] 
... 

SQLSTATE 22001 вызывает с помощью символьных данных, правильно усечение произошло; например, значение update или insert является строкой, которая слишком длинна для столбца, или значение datetime не может быть назначено переменной хоста, поскольку оно слишком мало.

Но есть ли способ проверить, какой столбец вызывает эту ошибку?

ответ

0

От этого сообщения об ошибке нет способа определить столбец, который вызывает вашу проблему. Но на основании этой ошибки: SQLERRMC = null. Ваши данные пытаются вставить нулевое значение, либо ваш столбец не принимает значения NULL, либо не передает нулевой тип нулевого значения.

Если вы используете подготовленный оператор, подобный этому, то для вставки нулевого значения вам нужно будет указать его.

String query = "insert into table_temp(col1,col2) values(?,?)"; 
pstmt = con.prepareStatement(query); 
pstmt.setString(1, "a"); 
pstmt.setNull(2, java.sql.Types.NULL);