有时候事情不是向想象的那样的,为了保护对原有系统的投入,不会因为要做新的应用,就把原来的东西全部换掉。对于异构系统的集成,经常会碰到这样的问题。所以在这个基础上,首先考虑的是问题来了搞不搞的定,其次才是如何能做得更好。不知道我的说法大家是否赞成。
1。java.util.Timer和java.util.TimerTask虽然功能上弱了点,但还是比较好用的两个工具类,能满足一般的应用。但要注意的是,如果时间间隔太短,而对某个表进行扫描,我觉得这样做是有问题的。比如,我每隔5秒钟要对N多通话记录(假如N的值比较大),进行计算话费,这时用Timer和TimerTask就会有问题了,因为每隔5秒它会开启一个新的线程,但是5秒前的线程可能并没有处理完所有的通话记录,这时就有可能会出现一条通话记录生成了多个话费的问题,哈哈,多收了用户的钱,这下麻烦了,小心人家告你,嘿嘿。。。
所以在用这两个类的时候一定要问一问,在我这个时间间隔中是否能处理完所有的数据?
2。通常缓存都是把数据或者对象暂时保存到内存的,我晕,你居然想到了对象序列化到文件,不知道文件IO很慢吗?与其这样还不如持久化到数据库呢!看你是否能将第一次创建的对象保存到静态的HashMap或ArrayList中。
3。“存储过程里面能直接返回一个类似于java里面的对象数组”。
哈哈,这个问题我原来就遇到过,说实话我也很讨厌这样做,但是没办法。我COPY一段代码给你吧,我不想做任何解释。
StringBuffer sb = new StringBuffer("{CALL sp_listschedule_local(?, ?, ?, ")
.append(" ?,?,?,?,?,?,?) }");
CallableStatement cstmt = conn.prepareCall(sb.toString());
int i = 1;
/*七个传入参数*/
cstmt.setString(i++, param.getRideDate());
cstmt.setString(i++, param.getIsDisCount());
cstmt.setString(i++, param.getStartStationId());
cstmt.setString(i++, param.getToStationId());
cstmt.setString(i++, param.getScheduleId());
cstmt.setInt(i++, param.getSellLimittedTime().intValue());
cstmt.setInt(i++, param.getSelfOrgId().intValue());
cstmt.setInt(i++, param.getIsBuPiao().intValue());
cstmt.setString(i++, param.getSqlStr());
/*一个输出参数*/
int[] retIndex = {i};
cstmt.registerOutParameter(i++, oracle.jdbc.driver.OracleTypes.CURSOR);
/*执行过程*/
cstmt.executeUpdate();
int j=0;
ResultSet rs = (ResultSet) cstmt.getObject(retIndex[j++]);
ListScheduleDto dto = ListScheduleRet.createNomalDtosFromResultSet(rs);
ListScheduleRet ret = new ListScheduleRet();
ret.setDto(dto);
cstmt.close();