oracle 获取日期的毫秒_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、付费专栏及课程。

余额充值