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類型導致

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章