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
仍然是一个空字符串。
我在 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
仍然是一个空字符串。