如何使用 JDBCTemplate 向外键插入空值
How to insert null value to foreign key with JDBCTemplate
我有以下架构:
CREATE TABLE API
(
ID BIGINT NOT NULL,
NAME VARCHAR NOT NULL,
API_PARENT_ID BIGINT,
CONSTRAINT API_PKEY PRIMARY KEY (ID)
CONSTRAINT API_PARENT_ID_FKEY FOREIGN KEY (API_PARENT_ID) references API,
);
我的 API 实体在 api 依赖项(如父子关系)的情况下对自身有 FK
我已经用 jdbc 模板处理了 CRUD 部分(这意味着我避免使用休眠)。
当我的 API 是父级时,我遇到了一个问题,然后 api_parent_id 值应该为空。
下一行(我跳过了无意义的列):
String _SQL_UPDATE_API = "update api set api_parent_id = ? where id = ?"
this.jdbcTemplate.update(_SQL_UPDATE_API, api.getParent !=null ? api.getParent().getId() : null , api.getId());
return 出现以下错误:
[90012-196]; nested exception is org.h2.jdbc.JdbcSQLException: Parameter "#1" is not set; SQL statement: update api set api_parent_id = ? where id = ?
我应该如何处理空值?
我尝试使用 MapSqlParameterSource 或 PreparedStatement 来指定
ps.setNull(1,Types.NULL);
ps.setNull(1,Types.NULL);
很遗憾,您需要根据您的 JDBC driver.[=13] 设置与列类型相对应的列的特定 JDBC 类型=]
有些 JDBC driver 比其他人更挑剔。我想 H2 需要特定类型。
在这种情况下,使用 Types.BIGINT
,如:
ps.setNull(1,Types.BIGINT);
使用此 update 函数将参数与参数类型一起传递。
Integer id = 1
Integer parent_id = null
String _SQL_UPDATE_API = "update api set api_parent_id = ? where id = ?";
java.lang.Object[] args = [parent_id, id]
int[] argTypes = [java.sql.Types.BIGINT, java.sql.Types.BIGINT]
updCnt = jdbcTemplate.update(_SQL_UPDATE_API, args, argTypes);
注意 - 这是 Groovy 语法,因此请根据需要调整 Java。
在 Oracle 12 中为我工作。
我有以下架构:
CREATE TABLE API
(
ID BIGINT NOT NULL,
NAME VARCHAR NOT NULL,
API_PARENT_ID BIGINT,
CONSTRAINT API_PKEY PRIMARY KEY (ID)
CONSTRAINT API_PARENT_ID_FKEY FOREIGN KEY (API_PARENT_ID) references API,
);
我的 API 实体在 api 依赖项(如父子关系)的情况下对自身有 FK
我已经用 jdbc 模板处理了 CRUD 部分(这意味着我避免使用休眠)。 当我的 API 是父级时,我遇到了一个问题,然后 api_parent_id 值应该为空。
下一行(我跳过了无意义的列):
String _SQL_UPDATE_API = "update api set api_parent_id = ? where id = ?"
this.jdbcTemplate.update(_SQL_UPDATE_API, api.getParent !=null ? api.getParent().getId() : null , api.getId());
return 出现以下错误:
[90012-196]; nested exception is org.h2.jdbc.JdbcSQLException: Parameter "#1" is not set; SQL statement: update api set api_parent_id = ? where id = ?
我应该如何处理空值? 我尝试使用 MapSqlParameterSource 或 PreparedStatement 来指定
ps.setNull(1,Types.NULL);
ps.setNull(1,Types.NULL);
很遗憾,您需要根据您的 JDBC driver.[=13] 设置与列类型相对应的列的特定 JDBC 类型=]
有些 JDBC driver 比其他人更挑剔。我想 H2 需要特定类型。
在这种情况下,使用 Types.BIGINT
,如:
ps.setNull(1,Types.BIGINT);
使用此 update 函数将参数与参数类型一起传递。
Integer id = 1
Integer parent_id = null
String _SQL_UPDATE_API = "update api set api_parent_id = ? where id = ?";
java.lang.Object[] args = [parent_id, id]
int[] argTypes = [java.sql.Types.BIGINT, java.sql.Types.BIGINT]
updCnt = jdbcTemplate.update(_SQL_UPDATE_API, args, argTypes);
注意 - 这是 Groovy 语法,因此请根据需要调整 Java。
在 Oracle 12 中为我工作。