java—有没有办法将sql参数的默认值设置为null?

kuarbcqp  于 2021-07-08  发布在  Java
关注(0)|答案(3)|浏览(452)

我有一个使用mapsqlparametersource创建sql参数的代码。这是我的密码:

MapSqlParameterSource parameters = new MapSqlParameterSource()
            .addValue(EVENT_ID, eventId)
            .addValue(TYPE, type.toString())
            .addValue(ACCOUNT_ID, null)
            .addValue(USER_ID, null);
        if (Type.SPOOFER_USER == type) {
            parameters.addValue(USER_ID, account.getUser().getId());
        }
        else {
            parameters.addValue(ACCOUNT_ID, account.getId());
        }

基本上,如果帐户类型是欺骗,我必须有用户id而不是帐户id。但是,我不喜欢我必须设置 account_id 以及 user_id 当我示例化时为null parameters . 有没有什么办法 account_id 以及 user_id 为空,这样我就不用写这两行了

MapSqlParameterSource parameters = new MapSqlParameterSource()
            .addValue(EVENT_ID, eventId)
            .addValue(TYPE, type.toString())
            .addValue(ACCOUNT_ID, null) //////////////////////////THIS ONE
            .addValue(USER_ID, null);   //////////////////////////AND THIS ONE

以下是我的sql查询:

INSERT INTO database (id, event_id, type, account_id, user_id)
    VALUES (database.nextval, :event_id, :type, :account_id, :user_id)

更新:
也许我的问题不够具体。当我跑的时候

jdbcTemplate.update(insertEventExtra, parameters);

对于给定的参数而不使其为“null”,我在单元测试中遇到以下异常:

org.springframework.dao.InvalidDataAccessApiUsageException: No value supplied for the SQL parameter 'user_id': No value registered for key 'user_id'

我用hsql来测试它。我的.sql如下所示:

...
ID NUMBER(38,0) PRIMARY KEY,
EVENT_ID BIGINT NOT NULL,
TYPE VARCHAR2(20 BYTE) NOT NULL,
ACCOUNT_ID NUMBER(38,0),
GROUP_ID NUMBER(38,0),
USER_ID NUMBER(38,0),
...

所以我的具体问题是,当我尝试运行带有参数的测试而不将其设置为null时,我的测试会给我异常。

nr9pn0ug

nr9pn0ug1#

默认情况下,除非在插入或更新列时提供值,否则所有not null列的默认值都为null。

xpcnnkqh

xpcnnkqh2#

在数据库架构中,使列可以为null并默认为null。然后,如果在插入时没有为列指定值,则它应该默认为null

6ss1mwsb

6ss1mwsb3#

必须包含addvalue(account\u id,null)和addvalue(user\u id,null),因为insert语句包含两个命名参数 :account_id , :user_id .
框架尝试从 MapSqlParameterSource 对象,当它找不到其中一个时,它抛出异常。它这样做是为了避免用户错误,因为如果不想为参数提供值,就不会在insert语句中包含该参数。

相关问题