1. 程式人生 > 其它 >Caused by: java.sql.SQLException: ORA-01861: 文字與格式字串不匹配

Caused by: java.sql.SQLException: ORA-01861: 文字與格式字串不匹配

專案中遇到這樣一個問題:

 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型別的時間進行對比,所以就會出現文字與格式字串不匹配的問題。