在使用Oracle数据库时,把Timestamp类型的字段查出来显示到界面上居然是一串数字,不符合我们常见的要求,我就查了一下,发现中间还有很多道道,Oracle查出来的Timestamp类型和java里边的Timestamp类型不是同一种类型,在java后台转化不了,所以只能另辟蹊径。
就想到了用Oracle中的Timestamp类型接收,然后转化,下来看具体实现方法:
package com.sql.csv.db2csv.service;
import com.sql.csv.common.Const;
import com.sql.csv.mapper.oracle.IOracleDao;
import com.sql.csv.util.CsvWriter;
import lombok.extern.slf4j.Slf4j;
import oracle.sql.TIMESTAMP;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Method;
import java.nio.charset.Charset;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.*;
@Service
@Slf4j
public class Db2csvService {
private void 省略...() {
String time = getStringValue(map.get("time"));
}
private String getStringValue(Object obj) {
if(null == obj){
return "";
}else if(obj instanceof byte[]){
return new BASE64Encoder().encode((byte[])obj);
//new BASE64Decoder().decodeBuffer(String base64)
}else if(obj instanceof oracle.sql.TIMESTAMP){
Timestamp timestamp = getOracleTimestamp(obj);
String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").format(timestamp);
return time;
}
return obj.toString();
}
//运用反射调用Oracle中Timestamp的方法,进行处理
private Timestamp getOracleTimestamp(Object value){
try{
Class clz = value.getClass();
Method method = clz.getMethod("timestampValue",null);
//System.out.println("11----->" + clz.getMethod("timestampValue",null).invoke(value,null));
//System.out.println(clz.getMethod("timeValue",null).invoke(value,null));
//System.out.println(clz.getMethod("dateValue",null).invoke(value,null));
return (Timestamp)method.invoke(value,null);
}catch(Exception ex){
ex.printStackTrace();
return null;
}
}
}