我有這個處理ResultSet的Java方法。爲什麼這個SimpleDateFormat失去了關於時間的信息?
protected void populateDto(String[] rowSet, ResultSet rs, String[] columunsNames) throws SQLException {
for (int i = 0; i < rowSet.length; i++) {
rowSet[i] = rs.getString(columunsNames[i]);
}
}
正如你可以看到所有的結果被視爲字符串類型(getString用於任何列類型)。遇到日期列時,它會自動轉換爲字符串。得到的日期將出現類似於此:
2012-08-01 16:10:47.0
我已經修改了上面的腳本,創建類似的東西:
protected void populateDto(String[] rowSet, ResultSet rs, String[] columunsNames) throws SQLException {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
for (int i = 0; i < rowSet.length; i++) {
Object o = rs.getObject(columunsNames[i]);
if (o instanceof Date) {
rowSet[i] = formatter.format((Date)o);
} else {
rowSet[i] = (String)o;
}
}
}
該方法將所有對象視爲Object,之後將檢查該Object是否是Date的實例。如果這是真的,則將根據formatter
進行格式化。問題是,以這種方式返回的數據是這樣的:
2012-08-01 00:00:00.0
爲什麼?
更新1 - 最後的工作方法實現:
protected void populateDto(String[] rowSet, ResultSet rs, String[] columunsNames, SimpleDateFormat formatter) throws SQLException {
Timestamp ts = null;
for (int i = 0; i < rowSet.length; i++) {
Object obj = rs.getObject(columunsNames[i]);
if (obj instanceof Date) {
ts = rs.getTimestamp(columunsNames[i]);
rowSet[i] = formatter.format(ts);
} else {
if(obj!=null)
rowSet[i] = obj+"";
else
rowSet[i] = "";
}
}
}
如果我檢查instanceof Timestamp,我會得到一個錯誤,並將對象投射到Timestamp中。我該怎麼辦? –
@Mariano你可以通過編輯你的問題發佈你的代碼嗎? – user75ponic
你在哪裏建議使用Timestamp?你應該如何修改我的方法? –