我有一個隨機產生的問題(一次調用千分之一)。 錯誤ORA-01722:無效號碼是在準備好的語句Oracle數據庫中執行SQL更新時以隨機方式生成的。的情況下詳情如下:我無法理解ORA-01722背後的原因:無效號碼
try {
connection = getConnection();
statement = connection.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
if (params[i] instanceof Date) {
statement.setTimestamp(i + 1, new Timestamp(((Date) params[i]).getTime()));
} else if (params[i] instanceof java.util.Date) {
statement.setTimestamp(i + 1, new Timestamp(((java.util.Date) params[i]).getTime()));
} else {
statement.setObject(i + 1, params[i]);
}
paramsBuilder.append(": " + params[i]);
}
if (logger.isInfoEnabled()) {
logger.info("Query String [" + sql + "] [" + paramsBuilder + "]");
logger.info("Query Parameters [" + paramsBuilder + "]");
}
result = statement.executeUpdate();
if (logger.isInfoEnabled()) {
logger.info(result + " rows affected");
}
} catch (SQLException e) {
if (logger.isInfoEnabled()) {
String message = "Failed to execute SQL statment [" + sql + "] with parameters [" + paramsBuilder + "]";
logger.error(message, e);
}
throw new DAOException(e);
}
和在日誌中的值就是這樣:
Failed to execute SQL statment [update CUSTOMER_CASE set no_of_ptp=?, no_of_unreached=?,collector_name=? , last_case_status_history_id=?, current_handler=?, handling_start_time=?,due_total_open_amount=?, payment_due_invoice_id =? where id=?] with parameters [: 0: 0: auto: 5470508: null: null: 0.0: 23410984: 2476739] java.sql.SQLException: ORA-01722: invalid number
通過跟蹤在DB查詢參數的所有參數都是通過JDBC驅動器正確地傳送除了參數它被值"<C4>^X* U"
替換(注意這個值在char'u'之前包含回車!)。我不知道爲什麼
你試圖插入的對象的類型是什麼? toString()返回23410984,但它是一個Integer,Long還是BigDecimal? – Augusto
'statement'和'result'的範圍是什麼? –
對象類型很長,數據庫列號是 – user1017344