0 0

请教IBATIS超难度问题,很诡异5

莫名其妙出现异常,至今没有重现。
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 !
2014年5月13日 13:56

2个答案 按时间排序 按投票排序

0 0

exportFiles 为空,采用foreach 会报空指针异常
具体错误没看出来

2014年5月16日 15:19
0 0

应该是ORACLE吧
1.首先检查表是不是对应用户的权限,在查询中指定表名user.table
2.创建表时,表名是不是用过双引号,这样查询时也需要表名带上双引号

2014年5月13日 16:19

相关推荐

    ibatis总结 ibatis ibatis ibatis ibatis

    Ibatis 是一款轻量级的Java持久层框架,它允许开发者将SQL语句与Java代码分离,从而使得数据库访问更加灵活、易于维护。本篇文章将深入探讨Ibatis的核心概念、最佳实践以及与其他框架如Struts和Spring的整合。 1. ...

    解决IBatis缓存动态字段问题

    ### 解决IBatis缓存动态字段问题 #### 背景与问题描述 在使用IBatis框架处理数据库操作时,可能会遇到动态数据表名、动态字段名的情况。这种情况下,由于IBatis的缓存机制,可能导致字段找不到的问题。具体表现为...

    ibatis demo,ibatis例子,ibatis示例

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将SQL语句与Java代码分离,从而更好地管理数据库操作。Ibatis的出现,解决了传统JDBC中手动编写SQL和结果集映射的繁琐工作,...

    ibatis开发过程取值问题

    本篇文章将深入探讨Ibatis在开发过程中遇到的取值问题,以及“##”符号在其中的作用。 首先,让我们了解Ibatis的核心概念。Ibatis的主要目标是解决对象关系映射(ORM)的问题,它允许开发者编写XML或注解形式的SQL...

    ibatis源码,ibatis源码 ibatis源码 ibatis源码

    《深入解析iBatis源码》 iBatis,一个优秀的Java持久层框架,以其轻量级、灵活的特性在众多ORM(Object-Relational Mapping)框架中独树一帜。iBatis的核心在于它的SQL映射机制,它将数据库操作与业务逻辑解耦,...

    Ibatis入门例子,Ibatis教程

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将注意力集中在编写SQL语句上,而无需关注JDBC代码的编写。Ibatis消除了几乎所有的JDBC代码和手动设置参数以及获取结果集的...

    ibatis入门实例,很方便,导入即用

    **Ibatis 入门实例详解** Ibatis 是一个优秀的、开源的 Java 数据访问框架,它简化了数据库操作,使得开发者可以更加专注于 SQL 而不需处理底层的 JDBC 编码。Ibatis 提供了一个映射框架,允许将 SQL 查询与 Java ...

    ibatis教程,ibatis帮助文档

    iBATIS是一个由Clinton Begin创建,目前由Apache基金会支持的持久化框架,它专注于数据库查询的简化,尤其在JDBC编程方面提供了极大的便利。相对于全自动化ORM解决方案如Hibernate,iBATIS被称为“半自动化”ORM实现...

    ibatis api,ibatis文档,ibatis说明文档

    Ibatis文档是学习和解决问题的重要资源,它包含了详细的API参考、配置指南、最佳实践和常见问题解答。通过阅读文档,你可以了解如何配置Ibatis、创建Mapper接口和XML映射文件,以及如何处理复杂的查询和关联。 在...

    Ibatis3手册 Ibatis3参考手册

    ### Ibatis3手册知识点概述 Ibatis3作为一款流行的持久层框架,在软件开发领域具有重要的地位。本篇文章基于“Ibatis3手册 Ibatis3参考手册”的标题及描述,深入解析Ibatis3的核心概念、架构特点以及如何进行实际...

    ibatis2指南及ibatis包

    ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南

    ibatis乱码解决方法(ibatis独立)

    本文将详细讨论如何解决Ibatis中的乱码问题,特别是涉及到GBK和ISO_8859_1编码格式时的解决方案。 首先,我们需要了解乱码产生的原因。乱码通常是因为字符编码不一致导致的。在Java和数据库之间进行数据交互时,...

    ibatis应对批量update

    为了解决这个问题,ibatis(现已更名为MyBatis)提供了一种支持批量更新的机制,能够显著提高数据处理的速度。 #### 批量Update背景与问题 在实际应用中,经常会遇到需要批量更新数据库中的数据的情况,例如:商品...

    ibatis

    1. SQL映射:Ibatis 允许开发者在XML文件中直接编写SQL语句,这既保留了SQL的灵活性,又避免了硬编码SQL在Java代码中的问题。此外,通过动态SQL,开发者可以根据条件灵活地修改查询,比如使用`&lt;if&gt;`、`&lt;choose&gt;`、`...

    Ibatis

    **Ibatis 指南** Ibatis 是一个优秀的开源持久层框架,它允许开发者将 SQL 查询与 Java 代码分离,从而避免了传统的 JDBC 编程中的大量模板代码。作为一个轻量级的框架,Ibatis 提供了灵活的映射机制,使得 XML 或...

    iBATIS实战.pdf

    《iBATIS实战》是讲述iBATIS框架的权威著作。书中既详实地介绍了iBATIS的设计理念和基础知识,也讨论了动态SQL、高速缓存、DAD框架等高级主题,还讲解了iBATIS在实际开发中的应用。《iBATIS实战》的最后给出了一个...

    ibatis api 帮助文档+IBATIS 开发文档

    **IBATIS API 帮助文档与IBATIS开发文档详解** IBATIS,一个由iBATIS公司开发的开源持久层框架,是Java世界中广泛使用的数据访问接口(DAO)工具。它允许开发者将SQL语句直接写在XML配置文件中,实现了SQL与Java...

    iBATIS-DAO-2.3.4.726.rar_com.ibatis.dao_iBATIS dao 2_iBatis DAO_

    iBATIS DAO是Java开发中的一个持久层框架,它提供了数据访问对象(DAO)的实现,使得数据库操作更加简单和灵活。在这个2.3.4.726版本的源码中,我们可以深入理解iBATIS DAO的工作原理,并通过添加注释来帮助我们更好...

    iBatis开发指南和一个iBatis实例

    iBatis是一个轻量级的Java持久层框架,它提供了SQL映射框架,将SQL语句与Java代码分离,使得数据库访问更为灵活和可控。在本压缩包中,你将找到一系列关于iBatis的学习资源,包括PDF文档、实例代码等,这些都是深入...

Global site tag (gtag.js) - Google Analytics