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类型的时间进行对比,所以就会出现文字与格式字符串不匹配的问题。



相关文章
|
26天前
|
安全 Java API
【Java字符串操作秘籍】StringBuffer与StringBuilder的终极对决!
【8月更文挑战第25天】在Java中处理字符串时,经常需要修改字符串,但由于`String`对象的不可变性,频繁修改会导致内存浪费和性能下降。为此,Java提供了`StringBuffer`和`StringBuilder`两个类来操作可变字符串序列。`StringBuffer`是线程安全的,适用于多线程环境,但性能略低;`StringBuilder`非线程安全,但在单线程环境中性能更优。两者基本用法相似,通过`append`等方法构建和修改字符串。
44 1
|
2天前
|
Java
Java实现:将带时区的时间字符串转换为LocalDateTime对象
通过上述方法,你可以将带时区的时间字符串准确地转换为 `LocalDateTime`对象,这对于处理不需要时区信息的日期和时间场景非常有用。
39 4
|
11天前
|
算法 Oracle Java
Java字符串拼接技术演进及阿里巴巴的贡献
本文主要讲述了Java字符串拼接技术的演进历程,以及阿里巴巴贡献的最新实现 PR 20273。
|
16天前
|
算法 Oracle Java
Java字符串拼接技术演进及阿里巴巴的贡献
本文主要讲述了Java字符串拼接技术的演进历程,以及阿里巴巴贡献的最新实现 PR 20273。
|
28天前
|
存储 Java
|
28天前
|
存储 Java
如何在 Java 中打印字符串数组列表
【8月更文挑战第23天】
26 2
|
28天前
|
存储 Java API
|
8天前
|
SQL 关系型数据库 MySQL
MySQL根据某个字段包含某个字符串或者字段的长度情况更新另一个字段的值,如何写sql
MySQL根据某个字段包含某个字符串或者字段的长度情况更新另一个字段的值,如何写sql
21 0
|
30天前
|
Java 测试技术
Java系列之判断字符串是为空或者null
这篇文章介绍了如何在Java中使用`isEmpty()`方法判断字符串是否为空或`null`,并提供了相应的测试用例来演示其用法。