У меня проблема, которая генерируется случайным образом (один раз между тысячной разговора). Ошибка ORA-01722: недопустимый номер генерируется случайным образом при выполнении обновления sql в подготовленном операторе базы данных Oracle. В корпусные детали, как показано ниже:Я не могу понять причину 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
путем отслеживания параметров запроса на БД все параметры корректно перенесены через драйвер JDBC для параметра за исключением того, 23410984 он был заменен на значение "<C4>^X* U"
(обратите внимание, что это значение содержит возврат каретки до символа 'u'!). Не знаю почему
Каков тип объекта, который вы пытаетесь вставить? ToString() возвращает 23410984, но является ли он целым, длинным или большим децималом? – Augusto
Какова область действия 'statement' и' result'? –
Тип объекта длинный, а столбец базы данных - номер – user1017344