同步不同数据库下表的数据

98 阅读2分钟

1、项目结构是:

先由一个定时器类timer--->服务层Service接口--->服务层ServiceImpl接口实现层

主要的代码和逻辑如下:

//定时器注解,每十秒执行一次,为了测试所以设这么短
@Scheduled(cron="0/10 * * * * ?")

logger.error("同步数据给xx表(xxTimer)开始执行");
try{
    xxService.add();//调用服务层接口方法
}catch (Exception e) {
    logger.error("同步数据给xx表(xxTimer)出现异常:",e);
}

同步数据时最麻烦的地方就是判断什么时候可以插入数据了,什么时候不能插入,比如表中已经有的数据是不能插入的,有时候会报主键冲突。

连接数据库jdbc代码:

Connection connection = null;
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";//SQL数据库引擎

String dbURL = "jdbc:sqlserver://127.0.0.1:3306;DatabaseName=mysql";//数据源  !!!注意若出现加载或者连接数据库失败一般是这里出现问题
String Name = "root";
String Pwd = "123456";
try {
    Class.forName(driverName);
    connection = DriverManager.getConnection(dbURL, Name, Pwd);
} catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
    logger.error("数据库连接失败");
}
Statement stmt = null;
try {
    stmt = connection.createStatement();
} catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

//操作数据库的相关代码

Date date = new Date();//时间
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
dateFormat.format(date)


//最后是需要手动关闭连接源的
try {
    stmt.close();
} catch (SQLException e) {
    // TODO: handle exception
    e.printStackTrace();
}
try {
    connection.close();
} catch (SQLException e) {
    // TODO: handle exception
    e.printStackTrace();
}

这次需求遇到的问题(重点):

1、数据刚插入进表,下一个判断就需要判断表中这条数据是否插入成功,可能时间太短,数据没操作成功,所以在判断前加了个

Thread.sleep(1000);

2、代码中的sql中字段名尽量全是大写,对应mysql中表的字段名也全是大写

3、代码中的sql不能出现有些符号,否则插入不成功,比如 " ' " ,

最后(个人吐槽):

这个需求说多了都是泪呀,这是我上班第二天接到的活,本来给了两天时间,可是客户突然脑抽筋,明天就要,搞得我当天就要写完,本来刚来公司,项目就不是很熟,我们这个主管就让我加班了,那天加到了24点了,主要是测试花了时间,真的是日了狗了,不过比较欣慰的是主管人比较好,知道我可能刚来公司搞不定,陪着我加班到24点了,不然还不知道能搞完吗,也是很感谢他,这本来也不是他该做的。