oracle数据库数据存入问题 java.sql.SQLException:ORA-01861:文字和格式字符串不匹配、数字类型填入了非数字类型

后台存入记录进入数据库,数据类型报错往往是日期类型出错。今天说说面对日期类型在不同数据表中的不同设置,我们该如何针对数据库参数类型的传参呢?
问题描述:

在系统的多人合作中,有的同事把表日期类型设置为 varchar2类型,有的同事把表日期类型设置为Date类型,存入日期咋传?
解决方法:

首先我们基本都是从前端的插件中选择时间传入后台取参数时,该参数类型为一个字符串类型。

1.当数据表的日期设置为varchar2类型,在java中我们通过SimpleDateFormat 进行规范化参数后直接参数传入进行比对就好了,如果数据表中为date类型,传入字符串类型就会报
ORA-01861:文字和格式字符串不匹配

    String finishDate  = request.getParameter("finishDate")==null?"":request.getParameter("finishDate");
                SimpleDateFormat matter = new SimpleDateFormat("yyyy-MM-dd");
                Calendar calendar = Calendar.getInstance();
                if ("".equals(finishDate) || finishDate== null) {
                    finishDate= matter.format(calendar.getTime());
                }

 通常是一个起始时间和结束时间查询时间段期间的所有记录

    if(recordDate!=null && !"".equals(recordDate.trim())){
                    sql.append("  and productiondate >= '").append(recordDate.trim()).append("' ");
                }
                if(finishDate!=null && !"".equals(finishDate.trim())){
                    sql.append("  and productiondate <= '").append(finishDate.trim()).append("' ");
                }

2. 当数据表的日期设置为date类型时,在mysql中我将前台取得的字符串进行转换为日期类型传入即可

            String recordDate= "2016-10-24 21:59:06";
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            System.out.println(sdf.parse(recordDate));

而在oracle中这种做法会报错误,
ORA-01858 :在要求输入数字处找到非数字字符

解决办法是用oracle自带的  to_date 函数,这样就没问题了啦。

    if(recordDate!=null && !"".equals(recordDate.trim())){
                sql.append("  and creation_date >= to_date( '").append(recordDate.trim()).append("','YYYY-MM-DD HH24:MI:SS') ");
            }
            if(finishDate!=null && !"".equals(finishDate.trim())){
                sql.append("  and creation_date <= to_date( '").append(finishDate.trim()).append("','YYYY-MM-DD HH24:MI:SS') ");
            }

一般的人不都是把数据库日期类型设置为varchar2的吗,变量名不是按照可识别的意思用驼峰原则命名吗?今天在做一个外部表查询时没看清楚浪费了两小时苦苦挣扎。

oracle的序列取出的类型是bigdecimal的
写插入日志表报这个错,是因为数据库是varchar2传入bigdecimal,数据库是date类型传入varchar2类型导致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值