oracle数据库to_date日期格式化到毫秒

事由:一个数据导入功能,其通过视图表里一条数据的时间字段作为判断是否已导入的标识。

      每次记录最后导入的一条数据的时间字段,下一次判断则导入上一次记录下的时间字段值以后的数据。

失败经验:网上看到有网友提供了“ff”可以精确到毫秒,代码如下:

  • 存最后一条数据的时间字段值,主要代码如下:

  SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");//定义格式,显示毫秒
  String date = df.format(lastdate);

  • sql查询语句代码如下:

  String lastdate = props.getProperty("lastdate"); //获取最后一次记录的时间值
  String sql = "select * from ( select * from view_news " ;
  if(null!=lastdate&&lastdate.length()>0){  
   sql +=" where create_date>to_date('"+lastdate+"','yyyy-MM-dd HH24:mi:ss ff') ";
  }
  sql +="  order by Create_date ) where rownum <= 1000  ";

  Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
  rs = stmt.executeQuery(getDocsSql());

 可以看到配置文件里存入的值为:lastdate=2010-11-20 03/:57/:58 000

 但是在执行sql语句时to_date报:日期格式无法识别

解决思路

      Statement 改为采用PreparedStatement,通过设置参数值setTimestamp()的方式来进行转换。

      String sql = "select * from ( select * from view_news " ;
      if(null!=lastdate&&lastdate.length()>0){ 
        sql +=" where create_date>?";
      }
     sql +="  order by Create_date ) where rownum <= 1000  ";

      PreparedStatement stmt = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
     
      if(lastdate1!=null && lastdate1.length()>0 )
       stmt.setTimestamp(1, Timestamp.valueOf(lastdate1));
      rs = stmt.executeQuery(); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值