Oracle中Timestamp类型字段查询结果格式化处理

在使用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;
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值