浏览 9123 次
锁定老帖子 主题:iBATIS超疑难问题,很诡异
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2014-05-13
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 ! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2014-05-14
能否把error的日志信息在多弄一些
|
|
返回顶楼 | |
发表时间:2014-05-15
检查实体中的属性是不是基础类型比如Integer,而传入参数的时候,,是不是基本数据类型int..强制转换报错。
比如:class{Integer a; Integer getA(){return a;} method(int a){}} 调用 method(class.getA());时 |
|
返回顶楼 | |
发表时间:2014-05-19
配置log日志打印jdbc sql语句,看真实发给数据库的sql及参数是什么样的,对比查找传参方面有什么问题。
|
|
返回顶楼 | |
发表时间:2014-05-19
记得我在csdn上回复过次问题,一个是xml文件需要resultType改成resultMap
|
|
返回顶楼 | |