2016-02-18 29 views
1

我使用彈簧JDBC用於從數據庫中獲取的數據,其中,ds是數據源對象以下述方式如何在使用spring jdbc模板獲取時自動格式化timestamp列?

JdbcTemplate jdbc=new JdbcTemplate(ds); 
List<Map<String,Object>> resultSet=jdbc.queryForList(dsDetailsIN.get("query").toString()); 

因爲我不知道結果集的列的數據類型,所以具有DATETIME數據類型的列轉換爲java日期格式。不過,我想自動格式化數據列,如果有適當格式的日期/ DateTime/TimeStamp列。

+0

因此,如果測試在地圖中返回的值是一個日期,並格式化你想要的方式。 –

+0

你能分享你用於輸出的代碼嗎? – Jan

回答

1

使用,而不是簡單的queryForList()的定製RowMapper考慮以下代碼:

JdbcTemplate jdbc = new JdbcTemplate(ds); 
    List<Map<String,Object>> resultSet = 
      //Use a custom RowMapper 
      jdbc.query(dsDetailsIN.get("query").toString(), new RowMapper<Map<String,Object>>() { 

     @Override 
     public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException { 
      //The map per row 
      Map<String,Object> map = new HashMap<String,Object>(); 
      //The target date format 
      DateFormat nice = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
      //Iterating the columns. 
      ResultSetMetaData meta = rs.getMetaData(); 
      for(int i = 1; i <= meta.getColumnCount(); ++i) { 
       Object o = rs.getObject(i); 
       //If a date use formatted String instead 
       if(o instanceof Date) { 
        o = nice.format(o); 
       } 
       //put into map. 
       map.put(meta.getColumnName(i), o); 
      } 
      return map; 
     } 

    }); 
+0

謝謝@Jan,它爲我工作。但是在一種情況下,它的衝突是爲了防止查詢本身包含日期列的格式。這是其他格式 – Mayur

+0

這是你的來源 - 所以這也是你的查詢?所以你可能只是從SQL中刪除自定義格式?否則,你可能會想要針對該特定語句調用另一個RowMapper?或者對於包含某些特定字符串的語句(日期轉換函數) – Jan

相關問題