項目中遇到這樣一個問題:
Caused by:java.sql.SQLException: ORA-01861: 文字與格式字符串不匹配 atoracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) atoracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331) atoracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288) atoracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743) atoracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:213) atoracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:796) atoracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1031) atoracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:836) atoracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1124) atoracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285) atoracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3390) atcom.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:185) atcom.ibatis.sqlmap.engine.mapping.statement.MappedStatement.sqlExecuteQuery(MappedStatement.java:221) atcom.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:189) ...43 more
這個問題的解決方案其實很簡單,但是一開始過於着急,導致調試時間加長,這是在項目的導出功能中遇到的問題,當輸入開始時間和結束時間進行高級搜索后需要導出,在導出時顯示空白頁,項目提示這樣的問題,於是我直接從導出開始卻沒有想導出不成功是因為之前輸入的開始時間和結束時間的格式不對,下面是改后的結果:
因為我們的ORM是通過MyBatis實現的,所以我們看下xml中的sql語句:
這個是改前的時間:
<!-- <isNotEmpty prepend=" " property="start_time" > AND T.COST_TIME >= #start_time# </isNotEmpty> --> <!-- <isNotEmpty prepend=" " property="end_time" > AND T.COST_TIME <= #end_time# </isNotEmpty> -->
下面是改后的時間格式:
<isNotEmpty prepend=" " property="start_time" > AND T.COST_TIME <![CDATA[ >=]]> TO_DATE(#start_time#,'yyyy-mm-dd hh24:mi:ss') </isNotEmpty> <isNotEmpty prepend=" " property="end_time" > AND T.COST_TIME <![CDATA[ <=]]> TO_DATE(#end_time#,'yyyy-mm-dd hh24:mi:ss') </isNotEmpty>
所以可以看出這個錯誤的原因是將string類型的時間和date類型的時間進行對比,所以就會出現文字與格式字符串不匹配的問題。