ibatis中使用truncate 问题

问题描述

java工程中做定时任务使用truncate清理表数据时,启动服务第一次执行定时任务时清理成功,第二次清理时语句执行了未清理掉未有异常,换成delete则可正常我测了job频率为5分钟、10分钟、两小时的情况结果都一样,监控oracle数据库第一次执行定时任务时oracle执行了truncate语句,第二次及之后运行程序oracle未执行truncate语句,工程框架spring+ibatis+struts2何解请高手给点建议?

解决方案

解决方案二:
没人顶沙发求二楼
解决方案三:
为嘛??????????????????????????
解决方案四:
有人知道么~~~???????????
解决方案五:
我也这个问题怎么解决的啊~~~~~~~~~~~~??????????????
解决方案六:
楼主ibatis是不是设置了缓存啊,同一语句同一查询条件的sql如果有用缓存的话,就有可能出现这个问题
解决方案七:
好像不是的这个还分电脑我的是xp系统可以别人用的win7系统反而不可以
解决方案八:
会不会是因为有脏数据的问题。我之前遇到过一次,就是因为有脏数据,导致truncate执行不成功,非得用delete。
解决方案九:
truncate是肯定可以执行的我现在在做一个job执行每次通过定时任务执行数据抽取,先必须把表清空然后在去抽取数据。发现每次第一次执行job会成功清空表(truncate...),但是第二次、第三次就会有问题。问题就是无法truncate之前的表。。。而且这个问题分不同的主机,碧如xp系统下可以到了win7系统就不可以~~~比较崩溃!!@
解决方案十:
<!--执行删除truncate数据--><statementid="deleteSqlByIbaits"parameterClass="java.util.Map"remapResults="true"><![CDATA[$executeSql$]]></statement>

@OverridepublicintclearSqlByIbaits(StringlatnId,Map<String,String>map)throwsSQLException{if(logger.isDebugEnabled()){logger.debug("entermethod:"+this.getClass().getName()+".clearSqlByIbaits(StringlatnId,Map<String,String>map)");}//StringexecuteSql=map.get("executeSql");//操作sqlIntegerdataNum=newInteger(0);try{//if(executeSql!=null){////查找数据+得到需要truncate的表名//executeSql=executeSql.toUpperCase();//executeSql="selectcount(1)from"//+executeSql.substring(executeSql.toUpperCase().indexOf("TABLE")).replace("TABLE","").trim().toUpperCase();//map.put("sql",executeSql);//设置executeSql//dataNum=(Integer)commonDAO.queryForObject(latnId,NAME_SPACE+".getCountAllByTableName",map);//}commonDAO.delete(latnId,NAME_SPACE+".deleteSqlByIbaits",map);}catch(SQLExceptione){logger.error("geterrorin"+this.getClass().getName()+".clearSqlByIbaits(StringlatnId,Map<String,String>map)",e);throwe;}if(logger.isDebugEnabled()){logger.debug("exitmethod:"+this.getClass().getName()+".clearSqlByIbaits(StringlatnId,Map<String,String>map)");}returndataNum;}

解决方案十一:
这里是job和配置packagecom.tydic.dep.audit2.onepointfee.job;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.apache.log4j.Logger;importorg.quartz.JobExecutionContext;importorg.quartz.JobExecutionException;importcom.tydic.dep.audit.band.job.ExtractBandAllJob;importcom.tydic.dep.audit.common.config.LoadUpIVPNFeeConfig;importcom.tydic.dep.audit.dataExtract.bo.DataExtractBo;importcom.tydic.dep.audit.job.initJob.AbstractStatefulJob;importcom.tydic.dep.audit.joblog.bo.JobLogBO;importcom.tydic.dep.common.config.CommonConfig;importcom.tydic.dep.common.log.LoggerFactory;importcom.tydic.dep.common.util.AudiDateUtil;importcom.tydic.dep.common.util.SpringContextUtils;/***@作者duzm*@创建日期Jul21,2014*@版本V1.0*/publicclassOnePointFeeCrmExtractJobextendsAbstractStatefulJob{//日志工具类privatestaticLoggerlogger=LoggerFactory.getLogger(ExtractBandAllJob.class);@OverridepublicvoidexecuteJob(JobExecutionContextjobExecutionContext)throwsJobExecutionException{if(logger.isDebugEnabled()){logger.debug("enterinmethod:"+this.getClass().getName()+".executeJob(JobExecutionContextjobExecutionContext)throwsJobExecutionException");}//记录心跳日志try{JobLogBOjobLogBO=(JobLogBO)SpringContextUtils.getBean("jobLogBO");jobLogBO.handlerJobLog(this.getClass().getName(),null);}catch(Exceptione){logger.error("写入job心跳日志表异常,geterrorin"+this.getClass().getName()+".executeJob(JobExecutionContextjobExecutionContext).",e);}logger.info("一点收费生产数据抽取开始!");//SimpleDateFormatsdf=newSimpleDateFormat("yyyyMMddHHmmss");//StringstartTime=sdf.format(newDate());//System.out.println("开始时间:"+startTime);StringaudiDate=null;StringaudateExpression=null;IntegeraudiDay=1;;//默认时间//获取稽核时间表达式try{CommonConfigconfig=LoadUpIVPNFeeConfig.getInstance().getConfig();audateExpression=config.getStringValue("auditExp","");logger.info("一点收费全量稽核,稽核时间:"+audateExpression);}catch(Exceptione){logger.error("geterrorin"+this.getClass().getName()+".getAudiDate()throwsException",e);}try{DataExtractBodataExtractBo=(DataExtractBo)SpringContextUtils.getBean("dataExtractBo");AudiDateUtilaudiDateUtil=newAudiDateUtil();//获取稽核时间的类audiDate=audiDateUtil.getAudiDate(audiDay,audateExpression);//调用方法获取稽核时间dataExtractBo.extractData("OnePointFeeCrmExtractJob",audiDate);//调用数据抽取配置实现中实现的公共方法}catch(Exceptione){logger.error("geterrorin"+this.getClass().getName()+".executeJob(JobExecutionContextjobExecutionContext)throwsJobExecutionException",e);}//StringendTime=sdf.format(newDate());//System.out.println("结束时间:"+endTime);//try{//longl=sdf.parse(startTime).getTime()-sdf.parse(endTime).getTime();//System.out.println("时间差:"+l/1000);//}catch(ParseExceptione){////TODOAuto-generatedcatchblock//e.printStackTrace();//}logger.info("一点收费生产数据抽取完成!");if(logger.isDebugEnabled()){logger.debug("exitinmethod:"+this.getClass().getName()+".executeJob(JobExecutionContextjobExecutionContext)throwsJobExecutionException");}}}

<ConfigItem><Name>jobName</Name><Description>不分本地网的Job</Description><Value>com.tydic.dep.audit2.onepointfee.job.OnePointFeeCrmExtractJob</Value></ConfigItem><ConfigItem><Name>com.tydic.dep.audit2.onepointfee.job.OnePointFeeCrmExtractJob.sendTime</Name><Description>GC国际漫游上传数据抽取Job执行时间</Description><Value>00/1***?</Value></ConfigItem><ConfigItem><Name>com.tydic.dep.audit2.onepointfee.job.OnePointFeeCrmExtractJob.dealNum</Name><Description>GC国际漫游上传数据抽取Job执行处理条数</Description><Value>100</Value></ConfigItem>

时间: 2024-09-15 07:45:02

ibatis中使用truncate 问题的相关文章

ibatis中使用缓存

一 什么是缓存以及为什么要使用缓存 从数据库读出数据后,该数据在某个缓冲区暂时被保存起来.当我们再次需要读取该数据的时候,直接从该缓冲区中读取,而不用再次访问数据库.我们知道数据库连接是很昂贵的资源,减少对数据库的访问是提高性能的手段之一.     二 Ibatis中使用缓存的配置方法 ①SqlMapConfig.xml <sqlMapConfig>  <settings cacheModelsEnabled="true" />  ...... </sql

大字段-在ibatis中怎么写clob的插入语句

问题描述 在ibatis中怎么写clob的插入语句 在ibatis中怎么写clob的插入语句 我配置了 class="org.springframework.jdbc.support.lob.DefaultLobHandler"/> 在insert语句中这样写 #xxnr,javaType=java.lang.String,jdbcType=CLOB# 总是报错转换请求无法实现或不合理 看了好多例子,还是不会写, 求大神赐教

ibatis中,用什么方式查询分页效率高?

问题描述 ibatis中,用什么方式查询分页效率高? 我的数据量比较大. 解决方案 ibatis 又不是数据库,它又不知道如何分页..他只是一个sql builder比如mysql里面的分页是用limit offset来做的,你就用ibatis写一个limit offset好了其它类型的数据库以此类推.与其说分页的效率,不如说是你sql语句查询的效率如何,最简单看有查询有没有用到索引,在mysql里面用explain select xxxx from xxx where解决方案二:三层嵌套是or

smarty中改进truncate使其支持中文的方法_php实例

本文实例讲述了smarty中改进truncate使其支持中文的方法.分享给大家供大家参考,具体如下: smarty的truncate不支持中文的截取.将smarty目录下plugins中的modifier.truncate.php改成下面这个样子就可以了 <?php /* * Smarty plugin * ------------------------------------------------------------- * Type: modifier * Name: truncate

ibatis中如何实现动态查询

问题描述 ibatis中如何实现动态查询 解决方案 <if test="memeberID != null }"> ****** </if> 可以嵌套入SQL

ibatis 中 “ !=”不等于这个符号执行吗?

问题描述 ibatis 中 " !="不等于这个符号执行吗? ibatis 常用判断,"!="这个运算可以用吗在ibatis里? 解决方案 执行,只有< >大小余号不执行 解决方案二: 常用的集中判断不等于应该用: 不等于

ibatis中cache配置的问题

问题描述 今天想在项目中实验下ibatis的cache,于是在网上查找资料,按照资料进行了配置,但是报错,项目无法启动<sqlMapnamespace="U5EQUIP_ATTACHMENT_V"><cacheModelid="model-cache"type="MEMORY"><flushIntervalseconds="60"/><flushOnExecutestatement=&

Oracle中的LOB数据类型以及ibatis中处理该类型的typeHandler

一 oracle中的LOB类型   LOB数据类型提供了BOLB.COLB.BFILE等具体数据类型,用来存储无结构大数据块,如文本.图片.图像.声音.视频等,存 储最大尺寸为4G,并且可以用高效.任意.随机分段的方式来存取数据.   BOLB:常用于保存包含图片.图像的大文件.资料 COLB:常用于保存只有文本的大文件.资料 BFILE:常用于需要用操作系统文件来进行业务工作的场合,如声音.视频       二 batis配置文件的类型控制器   无论是iBatis在预处理语句中设置一个参数,

ibatis中多表联接查询

 目前,我在做项目的时候,用到了spring + struts2 +ibatis 框架.平时用到的都是一张简单的表,来进行数据的增.删.改.查.而现在突然需要用到其它的一张表,或多张表进行联接查询,那么,在这种情况下,在xml映射文件中,就不能像单张表映射那样. 那么,我们需要怎么处理呢? 下面我就简单的来说明一下: 1.假如我数据库中有两张表:topo表和device表: 2.它们分别对应两个实体类:Topo.class和Device.class 3.我们需要做的就是把这两个实体类再整合出