java.sql.SQLException: ORA-01407: 无法在 Java 中更新为 NULL

java.sql.SQLException: ORA-01407: cannot update to NULL in Java

我在 Java 中有以下代码,其中我的 Update 语句失败并且我收到错误 java.sql.SQLException: ORA-01407: cannot update ("ORDER_ID_TEST"."SOURCES") to NULL。我真的不明白为什么 SOURCES 字段没有被映射。我只提到了代码的一些重要部分。 orderid 和其他字段正在更新语句中映射。

SOURCES 字段是 table 中非空数据类型的字符串。我正在尝试检查文件中 table 中是否存在 ORDERID 和 EXTORDID 的组合,然后进行更新或插入。

而不是 if (!latestModDate.isEmpty()) 如果我给 ((latestModDate != null)) 过程 运行 但它也插入值而不检查更新语句。

@Service

public class OImporter { private final static Logger log = LoggerFactory.getLogger(OImporter.class);

// Tabellenname auf Spalten in der Tabelle
Map<String, List<ColumnData>> columnDataCache = new HashMap<>();

private final JdbcTemplate jdbcTemplate;

public OImporter(JdbcTemplate jdbcTemplate) {
    this.jdbcTemplate = jdbcTemplate;
}

public void importFile(BufferedReader bufferedReader, String tableName, String fileName,
                       Map<Integer, Function<String, String>> COLUMN_TYPE_MAPPINGS,
                       Map<String, Function<String, String>> COLUMN_NAME_MAPPINGS) throws IOException {
    try {
        importFile(bufferedReader, tableName, fileName, COLUMN_TYPE_MAPPINGS, COLUMN_NAME_MAPPINGS,
                new ArrayList<>());
    } catch (IllegalStateException e) {
        log.warn(e.getLocalizedMessage());
    }
}

在 Oracle 数据库中,空字符串成为 NULL 值。

假设bar是一个VARCHAR2列类型,下面两条语句是一样的,都会把值设为NULL.

UPDATE foo SET bar = ''

UPDATE foo SET bar = NULL

您的代码失败,因为局部变量 sources 是一个空字符串。

由于您从未声明或初始化 columnName,因此不清楚该代码是如何编译的,我们也无法告诉您为什么 sources 仍然是一个空字符串。