oracle定时向mysql取数据_定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表...

任务类有1个:JobClass.java

该类的任务就是从定时从sqlserver中取出数据,然后更新oracle中数据

JobClass.javapackagecom.sinovatech.news.datatransjob;importjava.sql.PreparedStatement;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.List;importjava.util.regex.Matcher;importjava.util.regex.Pattern;importorg.springframework.jdbc.core.BatchPreparedStatementSetter;importorg.springframework.jdbc.core.JdbcTemplate;importcom.sinovatech.news.model.dto.CmsCyUser;public classJobClass{privateJdbcTemplate jdbcTemplate_oracle;privateJdbcTemplate jdbcTemplate_sqlserver;/*** 1. 定时操作:定时从sqlserver中取数据,更新数据库

* 2. 方法以TX结尾时 使用事务的一个条件 ,

* spring中的bean要使用下面的配置方法

*

*/

public voidmyJobTX() {

List cmsCyUsers =getData();

updateTicketInfo(cmsCyUsers);

}/*** 更新oracle中CMS_CY_USER表的数据,

* 使用BatchPreparedStatementSetter进行批处理

*@paramusers*/

public void updateTicketInfo(Listusers) {if(users==null||users.size()==0){return;

}final List cyUsers =users;

String sql= "update CMS_CY_USER set tickets=? where race_num=?";

jdbcTemplate_oracle.batchUpdate(sql,newBatchPreparedStatementSetter() {public void setValues(PreparedStatement ps, inti)throwsSQLException {

CmsCyUser user=cyUsers.get(i);

ps.setInt(1, user.getTickets().intValue());

ps.setString(2, user.getRaceNum());

}public intgetBatchSize() {returncyUsers.size();

}

});

resetTickets(users,jdbcTemplate_oracle);

}/*** 把没有race_num对应的tickets数据清零

*@paramusers

*@paramjdbcTemplateOracle*/

private void resetTickets(Listusers,JdbcTemplate jdbcTemplateOracle) {if(users==null||jdbcTemplateOracle==null){return;

}

StringBuffer buffer= newStringBuffer();

buffer.append("(");for(int i=0;i

buffer.append("'"+users.get(i).getRaceNum()+"',");

}

buffer.append("'"+users.get(users.size()-1).getRaceNum()+"')");

String sql= "update CMS_CY_USER set tickets=0 where race_num not in "+buffer.toString();

jdbcTemplateOracle.update(sql);

}/*** 从sqlserver中取出数据

*@return

*/

public ListgetData() {

List userList = new ArrayList();

List list= null;

String sql= "SELECT race_num,tickets FROM ticketinfo";

list=jdbcTemplate_sqlserver.queryForList(sql);if (!list.isEmpty() && list != null && list.size() > 0) {for (int i = 0; i < list.size(); i++) {

Object obj=list.get(i);

String[] ticketInfos= obj.toString().split(",");//因为只有2个值,所以直接使用下标来处理

String raceNum = ticketInfos[0].replaceAll("\\s*", "");//过滤掉含有中文的非法编号

if(isContainsChinese(raceNum)) {continue;

}

String tickets= ticketInfos[1];int b2 = tickets.indexOf('}');int b1 = tickets.indexOf('=');int a = raceNum.indexOf('=');

CmsCyUser user= newCmsCyUser();

raceNum= raceNum.substring(a + 1);

tickets= tickets.substring(b1 + 1, b2);

user.setRaceNum(raceNum);

user.setTickets(Long.parseLong(tickets));

userList.add(user);

}

}

System.out.println("..successful..");returnuserList;

}/*** 判断字符串中是否含有中文字符

*@paramstr

*@return

*/

public booleanisContainsChinese(String str) {

Matcher matcher= Pattern.compile("[\u4e00-\u9fa5]").matcher(str);boolean flg = false;if(matcher.find()) {

flg= true;

}returnflg;

}publicJdbcTemplate getJdbcTemplate_sqlserver() {returnjdbcTemplate_sqlserver;

}public voidsetJdbcTemplate_sqlserver(JdbcTemplate jdbcTemplateSqlserver) {

jdbcTemplate_sqlserver=jdbcTemplateSqlserver;

}publicJdbcTemplate getJdbcTemplate_oracle() {returnjdbcTemplate_oracle;

}public voidsetJdbcTemplate_oracle(JdbcTemplate jdbcTemplateOracle) {

jdbcTemplate_oracle=jdbcTemplateOracle;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值