莫名其妙出现异常,至今没有重现。
1、 异常:信息
[任务类型:55]org.mybatis.spring.mybatesSystemExceeption:nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.nullPointerExcetion:
###Cause:java.lang.NullPointerExcetion,NeedProcessImmediately!
TaskGenDataFile4Sage.java(exec:68)
2、 情况描述
每天会执行四到8次类似代码块,每次都会使用
:dataSndDefTblDao.findDataSndDefTblByCondition
当天四个线程,每个线程单独执行,其它三个成功,一个失败,后重新启动执行成功;
每次调用,只有传入的常量值(均非空)不一样,查询数据库是同一张配置表,表中数据近三十天未变化。
3、 错误出处代码:
DataSndDefTbl exportTable=new DataSndDefTbl();
if(CommonInfo.isInitData){// 这是人工干预操作,表示需要全量供数
exportTable.setDataFilePcsgTpcd(IParaDef.EXPORT_MODE_ALL);//传入常量参数01
}else{
exportTable.setDataFilePcsgTpcd(IParaDef.EXPORT_MODE_ADD);//传入常量参数ADD
}
exportTable.setRvlPsnTpcd(IParaDef.SYSTEM_TYPE_SAFETY);
List<DataSndDefTbl> exportFiles=dataSndDefTblDao.findDataSndDefTblByCondition(exportTable);
for(DataSndDefTbl exportFile:exportFiles)
{
if(!procTableData4Safety(trDate,exportFile,localFilePath,dataBeginTime,dataEndTime,conn))
{
return false;
}
}
return true;
4、 Dao层代码 DataSndDefTblMapper.java
public interface DataSndDefTblMapper{
//按条件查询 手工
public List<DataSndDefTbl> findDataSndDefTblByCondition(DataSndDefTbl dataSndDefTbl);
}
5、 持久化语句
mapper namespace="com.xxx.jg.app.batchproc.persistence.DataSndDefTblMapper">
<!-- 按条件查询 手工-->
<selectid="findDataSndDefTblByCondition" parameterType="com.xxx.jg.app.batchproc.domain.DataSndDefTbl" resultType="com.xxx.jg.app.batchproc.domain.DataSndDefTbl">
select INST_EMPE_DTTBL_NM as instEmpeDttblNm,DATA_FILE_PCSG_TPCD as dataFilePcsgTpcd,DATA_FILE_SND_CYC as dataFileSndCyc,RVL_PSN_TPCD as rvlPsnTpcd,INST_EMPE_DTTBL_DSC as instEmpeDttblDsc,INSEMPDTFLNM as insempdtflnm,DTFLSTRRTDSC as dtflstrrtdsc,DATA_SND_INCMTL_CND as dataSndIncmtlCnd,DATA_SND_ATTR_DSC as dataSndAttrDsc,INST_EMPE_HIST_DTTBL_NM as instEmpeHistDttblNm,BTCHPCS_PRTY_DSC as btchpcsPrtyDsc from DATA_SND_DEF_TBL
<where>
<if test="instEmpeDttblNm != null"> and trim(INST_EMPE_DTTBL_NM) = #{instEmpeDttblNm}</if>
<if test="dataFilePcsgTpcd != null"> and trim(DATA_FILE_PCSG_TPCD) = #{dataFilePcsgTpcd}</if>
<if test="dataFileSndCyc != null"> and trim(DATA_FILE_SND_CYC) = #{dataFileSndCyc}</if>
<if test="rvlPsnTpcd != null"> and trim(RVL_PSN_TPCD) = #{rvlPsnTpcd}</if>
</where>order by BTCHPCS_PRTY_DSC
</select>
</mapper>
6、 DataSndDefTbl对象属性
public class DataSndDefTbl{
// Fields
private String instEmpeDttblNm;
private String dataFilePcsgTpcd;
private String dataFileSndCyc;
private String rvlPsnTpcd;
private String instEmpeDttblDsc;
private String insempdtflnm;
private String dtflstrrtdsc;
private String dataSndIncmtlCnd;
private String dataSndAttrDsc;
private String instEmpeHistDttblNm;
private String btchpcsPrtyDsc;
……
7、 检核情况
6.1 传入常量为空 不会报错
6.2 exportFiles 为空,不会调用数据库查询
6.3 传入常量加了换行符,不会报错
6.4 传入dao为NULL,会报空指针,但不是ibatis持久化异常空指针,错误信息不一样
6.5 将数据库表记录清除,不会报错
6.6 将数据库记录中关键字段数据清空,不会报错
6.7 将数据库表删除,会报错,但错误信息也不一样。如果是数据库错误,日志会捕捉信息,但是这里没有捕获,说明非数据库错误,比如数据库不存在:
org.springframework.jdbc.BadSqlGrammarException:
### Error querying database. Cause: java.sql.SQLException: ORA-00942: table or view does not exist
### The error may exist in com/xxx/jg/app/batchproc/persistence/DataSndDefTblMapper.xml
### The error may involve com.xxx.jg.app.batchproc.persistence.DataSndDefTblMapper.findDataSndDefTblByCondition-Inline
### The error occurred while setting parameters
### SQL: select INST_EMPE_DTTBL_NM as instEmpeDttblNm,DATA_FILE_PCSG_TPCD as dataF ilePcsgTpcd,DATA_FILE_SND_CYC as dataFileSndCyc,RVL_PSN_TPCD as rvlPsnTpcd,INST_EMPE_DTTBL_DSC as instEmpeDttblDsc,INSEMPDTFLNM as insempdtflnm,DTFLSTRRTDSC as dtflstrrtdsc,DATA_SND_INCMTL_CND as dataSndIncmtlCnd,DATA_SND_ATTR_DSC as dataSndAttrDsc,INST_EMPE_HIST_DTTBL_NM as instEmpeHistDttblNm,BTCHPCS_PRTY_DSC as btchpcsPrtyDsc from DATA_SND_DEF_TBL WHERE trim(DATA_FILE_SND_CYC) = ? and trim(RVL_PSN_TPCD) = ? order by BTCHPCS_PRTY_DSC
### Cause: java.sql.SQLException: ORA-00942: table or view does not exist; bad SQL grammar []; nested exception is java.sql.SQLExceptio n: ORA-00942: table or view does not exist,NeedProcessImmediately !
相关推荐
Ibatis 是一款轻量级的Java持久层框架,它允许开发者将SQL语句与Java代码分离,从而使得数据库访问更加灵活、易于维护。本篇文章将深入探讨Ibatis的核心概念、最佳实践以及与其他框架如Struts和Spring的整合。 1. ...
### 解决IBatis缓存动态字段问题 #### 背景与问题描述 在使用IBatis框架处理数据库操作时,可能会遇到动态数据表名、动态字段名的情况。这种情况下,由于IBatis的缓存机制,可能导致字段找不到的问题。具体表现为...
Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将SQL语句与Java代码分离,从而更好地管理数据库操作。Ibatis的出现,解决了传统JDBC中手动编写SQL和结果集映射的繁琐工作,...
本篇文章将深入探讨Ibatis在开发过程中遇到的取值问题,以及“##”符号在其中的作用。 首先,让我们了解Ibatis的核心概念。Ibatis的主要目标是解决对象关系映射(ORM)的问题,它允许开发者编写XML或注解形式的SQL...
《深入解析iBatis源码》 iBatis,一个优秀的Java持久层框架,以其轻量级、灵活的特性在众多ORM(Object-Relational Mapping)框架中独树一帜。iBatis的核心在于它的SQL映射机制,它将数据库操作与业务逻辑解耦,...
Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将注意力集中在编写SQL语句上,而无需关注JDBC代码的编写。Ibatis消除了几乎所有的JDBC代码和手动设置参数以及获取结果集的...
**Ibatis 入门实例详解** Ibatis 是一个优秀的、开源的 Java 数据访问框架,它简化了数据库操作,使得开发者可以更加专注于 SQL 而不需处理底层的 JDBC 编码。Ibatis 提供了一个映射框架,允许将 SQL 查询与 Java ...
iBATIS是一个由Clinton Begin创建,目前由Apache基金会支持的持久化框架,它专注于数据库查询的简化,尤其在JDBC编程方面提供了极大的便利。相对于全自动化ORM解决方案如Hibernate,iBATIS被称为“半自动化”ORM实现...
Ibatis文档是学习和解决问题的重要资源,它包含了详细的API参考、配置指南、最佳实践和常见问题解答。通过阅读文档,你可以了解如何配置Ibatis、创建Mapper接口和XML映射文件,以及如何处理复杂的查询和关联。 在...
### Ibatis3手册知识点概述 Ibatis3作为一款流行的持久层框架,在软件开发领域具有重要的地位。本篇文章基于“Ibatis3手册 Ibatis3参考手册”的标题及描述,深入解析Ibatis3的核心概念、架构特点以及如何进行实际...
ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南
本文将详细讨论如何解决Ibatis中的乱码问题,特别是涉及到GBK和ISO_8859_1编码格式时的解决方案。 首先,我们需要了解乱码产生的原因。乱码通常是因为字符编码不一致导致的。在Java和数据库之间进行数据交互时,...
为了解决这个问题,ibatis(现已更名为MyBatis)提供了一种支持批量更新的机制,能够显著提高数据处理的速度。 #### 批量Update背景与问题 在实际应用中,经常会遇到需要批量更新数据库中的数据的情况,例如:商品...
1. SQL映射:Ibatis 允许开发者在XML文件中直接编写SQL语句,这既保留了SQL的灵活性,又避免了硬编码SQL在Java代码中的问题。此外,通过动态SQL,开发者可以根据条件灵活地修改查询,比如使用`<if>`、`<choose>`、`...
**Ibatis 指南** Ibatis 是一个优秀的开源持久层框架,它允许开发者将 SQL 查询与 Java 代码分离,从而避免了传统的 JDBC 编程中的大量模板代码。作为一个轻量级的框架,Ibatis 提供了灵活的映射机制,使得 XML 或...
《iBATIS实战》是讲述iBATIS框架的权威著作。书中既详实地介绍了iBATIS的设计理念和基础知识,也讨论了动态SQL、高速缓存、DAD框架等高级主题,还讲解了iBATIS在实际开发中的应用。《iBATIS实战》的最后给出了一个...
**IBATIS API 帮助文档与IBATIS开发文档详解** IBATIS,一个由iBATIS公司开发的开源持久层框架,是Java世界中广泛使用的数据访问接口(DAO)工具。它允许开发者将SQL语句直接写在XML配置文件中,实现了SQL与Java...
iBATIS DAO是Java开发中的一个持久层框架,它提供了数据访问对象(DAO)的实现,使得数据库操作更加简单和灵活。在这个2.3.4.726版本的源码中,我们可以深入理解iBATIS DAO的工作原理,并通过添加注释来帮助我们更好...
iBatis是一个轻量级的Java持久层框架,它提供了SQL映射框架,将SQL语句与Java代码分离,使得数据库访问更为灵活和可控。在本压缩包中,你将找到一系列关于iBatis的学习资源,包括PDF文档、实例代码等,这些都是深入...