Tôi gặp sự cố được tạo ngẫu nhiên (một lần giữa nghìn cuộc gọi). Lỗi ORA-01722: số không hợp lệ được tạo theo cách ngẫu nhiên trong khi thực hiện cập nhật sql trong cơ sở dữ liệu Oracle đã được chuẩn bị sẵn sàng. Các chi tiết trường hợp như sau:Tôi không thể hiểu lý do đằng sau ORA-01722: số không hợp lệ
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);
}
và giá trị trong nhật ký là như thế:
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
bằng cách lần theo các thông số truy vấn ở DB tất cả các thông số được chuyển giao một cách chính xác thông qua các trình điều khiển JDBC trừ tham số nó đã được thay thế bằng giá trị "<C4>^X* U"
(lưu ý giá trị này có chứa vận chuyển trở lại trước khi char 'u'!). Tôi không biết tại sao
Loại đối tượng bạn đang cố gắng chèn là gì? Các toString() trả về 23410984, nhưng nó là một Integer, Long hoặc BigDecimal? – Augusto
Phạm vi của 'câu lệnh' và' kết quả' là gì? –
Kiểu đối tượng dài và cột cơ sở dữ liệu là số – user1017344