2017-08-04 1 views
0

J'ai créé une application Web Java, dans laquelle j'utilise Spring JDBC Framework, afin d'écrire mes requêtes pour la base de données DB2. Jusqu'à présent, toutes les requêtes fonctionnent très bien.Comment insérer un horodatage "null" avec Spring JDBC Framework dans une base de données DB2

J'ai essayé aujourd'hui de créer une requête INSERT pour une table que j'ai dans ma base de données. La requête est vraiment forword droite, il fonctionne comme requête DB2 et il ressemble à ceci:

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

Dans ma classe Java j'ai créé les méthodes suivantes:

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}); 
    } 

Ma première requête a été la suivante:

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; 
    } 

et cela fonctionne très bien, comme toutes les autres requêtes que j'ai écrites aussi.

Lorsque j'essaie d'insérer "null" en tant que paramètre Timestamp dans la requête, je deviens une exception.

Comment puis-je insérer une valeur "null" pour un horodatage en utilisant le Spring JDBC Framework?

J'apprécierais vraiment avoir un commentaire.

+0

Vous devez nous indiquer l'exception. Et comment les tables de votre base de données sont définies. La colonne Timestamp est-elle définie comme nulle dans la base de données? – Ben

Répondre

0

J'ai débobiné pendant un certain temps et j'ai découvert que je peux hardcode un null dans ma requête et ensuite la requête fonctionne bien.

Avec un hardcoded « null » la requête ressemble à ceci:

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}); 
    } 

Lorsque cette requête est exécutée, je deviens un nouvel enregistrement dans la base de données DB2 avec une « null » valeur pour la colonne « UNSUBSCRIPTIONDATETIME ».