如何将带有 Spring JDBC 框架的 "null" 时间戳插入到 DB2 数据库中
How can I insert a "null" timestamp with Spring JDBC Framework into a DB2 database
我创建了一个 Java Web 应用程序,我在其中使用 Spring JDBC 框架,以便编写对 DB2 数据库的查询。到目前为止,所有查询都运行良好。
我今天尝试为数据库中的 table 创建一个 INSERT 查询。查询真的很简单,它像 DB2 查询一样工作,看起来像这样:
INSERT INTO MYDB.USERSUBSCRIPTION (USERNAME, SUBSCRIPTIONDATETIME, UNSUBSCRIPTIONDATETIME)
VALUES('JamesTheBoss', '2017-07-07 07:07:07.007', null);
在我的 Java class 中,我创建了以下方法:
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" 值?
非常感谢您的反馈。
我已经调试了一段时间,我发现我可以在我的查询中硬编码一个 null 然后查询工作正常。
硬编码 "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"。
我创建了一个 Java Web 应用程序,我在其中使用 Spring JDBC 框架,以便编写对 DB2 数据库的查询。到目前为止,所有查询都运行良好。
我今天尝试为数据库中的 table 创建一个 INSERT 查询。查询真的很简单,它像 DB2 查询一样工作,看起来像这样:
INSERT INTO MYDB.USERSUBSCRIPTION (USERNAME, SUBSCRIPTIONDATETIME, UNSUBSCRIPTIONDATETIME)
VALUES('JamesTheBoss', '2017-07-07 07:07:07.007', null);
在我的 Java class 中,我创建了以下方法:
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" 值?
非常感谢您的反馈。
我已经调试了一段时间,我发现我可以在我的查询中硬编码一个 null 然后查询工作正常。
硬编码 "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"。