java - 我无法理解 ORA-01722 : invalid number 背后的原因

标签 java oracle jdbc prepared-statement ora-01722

我有一个随机生成的问题(在千分之一的调用之间出现一次)。 错误ORA-01722: invalid number 是在准备语句Oracle 数据库中执行sql update 时以随机方式生成的。案例详情如下:

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" 替换了。 (注意这个值在 char 'u' 之前包含回车符!)。不知道为什么

最佳答案

关键原因是关于java.sql.SQLException: ORA-01722: invalid number
可能是字段last_case_status_history_id类型是number,但是你的参数是null

关于java - 我无法理解 ORA-01722 : invalid number 背后的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10636114/

相关文章:

java - RecyclerView 内的分组开关

oracle - 使用 ODP.NET 从 PL/SQL 函数获取 RECORD,无需接触 PL/SQL 代码

Oracle 组/计数查询

java - 内存不足错误 : Java heap size when memory is available

java - 如何在 Java 中拆分巨大的 GML 文件?

java - Neo4j:使用 XSD 强制架构

oracle - oracle死锁无法回滚吗?

java - 使用 Java 在软件更新时更新后端数据库

java - 在几次 next() 调用后从 ResultSet 获取 RowCount

java - Spring JDBC。插入具有一对多关系的记录