如何使用 Spring JDBC Framework 将“null”时间戳插入 DB2 数据库

Posted

技术标签:

【中文标题】如何使用 Spring JDBC Framework 将“null”时间戳插入 DB2 数据库【英文标题】:How can I insert a "null" timestamp with Spring JDBC Framework into a DB2 database 【发布时间】:2017-08-04 19:19:09 【问题描述】:

我创建了一个 Java Web 应用程序,在其中我使用 Spring JDBC 框架,以便为 DB2 数据库编写查询。到目前为止,所有查询都运行良好。

我今天尝试为我的数据库中的一个表创建一个 INSERT 查询。该查询实际上是直截了当的,它作为 DB2 查询工作,看起来像这样:

INSERT INTO MYDB.USERSUBSCRIPTION (USERNAME, SUBSCRIPTIONDATETIME, UNSUBSCRIPTIONDATETIME)
VALUES('JamesTheBoss', '2017-07-07 07:07:07.007', null);

在我的 Java 类中,我创建了以下方法:

private Timestamp getCurrentDateTimeInTimeStamp() 
        LocalDateTime currentDateAndTime = LocalDateTime.now();
        currentDateAndTime.format(DateTimeFormatter.ofPattern("yyy-MM-dd HH:MM:SS.mm")).replaceAll("T", " ");
        Timestamp timestamp = Timestamp.valueOf(currentDateAndTime);      
        return timestamp;
    

public void insertNewUserToDatabase(String username)    
        Timestamp  timestamp = getCurrentDateTimeInTimeStamp();
        String SQL = "INSERT INTO MYDB.USERSUBSCRIPTION (USERNAME, SUBSCRIPTIONDATETIME, UNSUBSCRIPTIONDATETIME) " +
                     "VALUES(?, ?, ?)";
        this.jdbcTemplateObject = new JdbcTemplate(dataSource);
        jdbcTemplateObject.update(SQL,new Object[]  username, timestamp, null);
    

我的第一个查询如下:

public List<UserSubscription> getAllUserSubscriptions() throws SQLException 
        String SQL = "SELECT * FROM MYDB.USERSUBSCRIPTION";
        this.jdbcTemplateObject = new JdbcTemplate(dataSource);
        List<UserSubscription> userSubscription = jdbcTemplateObject.query(SQL, new UserSubscriptionMapper());
        return userSubscription;
    

它工作正常,就像我写的所有其他查询一样。

当我尝试在查询中插入“null”作为时间戳参数时,我变成了一个异常。

如何使用 Spring JDBC 框架为时间戳插入“null”值?

非常感谢您提供反馈。

【问题讨论】:

您需要让我们知道例外情况。以及您的数据库表是如何定义的。 Timestamp 列是否在数据库中定义为可为空? 【参考方案1】:

我已经调试了一段时间,我发现我可以在查询中硬编码一个空值,然后查询就可以正常工作了。

使用硬编码的“null”,查询看起来像这样:

public void insertNewUserToDatabase(String username)    
        Timestamp  timestamp = getCurrentDateTimeInTimeStamp();
        String SQL = "INSERT INTO MYDB.USERSUBSCRIPTION (USERNAME, SUBSCRIPTIONDATETIME, UNSUBSCRIPTIONDATETIME) " +
                     "VALUES(?, ?, null)"; // <--- Hard Coded "null"
        this.jdbcTemplateObject = new JdbcTemplate(dataSource);
        jdbcTemplateObject.update(SQL,new Object[]  username, timestamp);
    

执行此查询时,我成为 DB2 数据库中的一条新记录,其中“UNSUBSCRIPTIONDATETIME”列的值为“null”。

【讨论】:

以上是关于如何使用 Spring JDBC Framework 将“null”时间戳插入 DB2 数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring Boot 设置 Spring JDBC 连接池?

如何在spring jdbc中使用数组

如何配置在 Spring + JDBC 中关闭自动提交?

在 Spring 框架中如何更有效地使用 JDBC?

使用 jdbc:embedded-database 时如何连接到 Spring 创建的 HSQL?

如何在 Spring MVC 中使用 @Bean 连接到 jdbc?