我有这个处理 ResultSet 的 Java 方法。
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;
}
}
}
此方法将所有内容视为对象,之后将检查该对象是否是 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] = "";
}
}
}