我是靠谱客的博主 个性酒窝,最近开发中收集的这篇文章主要介绍使用jdbc的方式同步数据到本地数据库(指定一次查询插入的数量),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

16、使用jdbc的方式同步数据到本地数据库
    /**
     * 同步数据到本地数据库
     */
    @Override
    public void syncDataToLocalDB() {
        // 查询同步开关
        SysConfig configParam = new SysConfig();
        configParam.setConfigKey("DBSYNCKEY");
        List<SysConfig> configList = sysConfigMapper.queryList(configParam);
        if (CollectionUtils.isEmpty(configList) || !"on".equals(configList.get(0).getConfigValue())) {
            return;
        }

        // 查询所有未同步的资源目录
        TableInfo param = new TableInfo();
        // 同步db数据状态位
        param.setIsDbSynced(0);
        param.setDbSync(1);
        List<TableInfo> tableInfoList = tableInfoMapper.queryByParam(param);
        // 1.通过得到字节码对象的方式加载静态代码块,从而注册驱动程序
        try {
            Class.forName("com.mysql.jdbc.Driver");
            // 循环资源目录 新建jdbc连接并查询
            if (!CollectionUtils.isEmpty(tableInfoList)) {
                for (TableInfo tableInfo : tableInfoList) {
                    Connection conn = null;
                    Statement stmt = null;
                    ResultSet rs = null;
                    try {
                        // 查询表数据结果
                        List<TableFiled> tableFiledList = tableFiledMapper.selectAllList(tableInfo.getId());
                        String url = "jdbc:mysql://" + tableInfo.getRemoteIp() + tableInfo.getRemoteBase() + "?useUnicode=true&characterEncoding=UTF-8&useSSL=false&zeroDateTimeBehavior=convertToNull";
                        conn = DriverManager.getConnection(url, tableInfo.getRemoteUser(), tableInfo.getRemotePassword());
                        int pageIndex = 1;
                        int pageSize = 500;
                        stmt = conn.createStatement();

                        // 删除表内记录
                        publicMapper.publicDeleteBatch(tableInfo.getEname());

                        rs = stmt.executeQuery("select * from " + tableInfo.getEname() + " limit " + ((pageIndex - 1) * pageSize) + "," + pageSize);

                        while (rs.next()) {
                            List<List> insertList = Lists.newArrayList();
                            List<Object> temp = Lists.newArrayList();
                            for (TableFiled tableFiled : tableFiledList) {
                                temp.add(rs.getString(tableFiled.getEname()));
                            }
                            insertList.add(temp);
                            while (rs.next()) {
                                temp = Lists.newArrayList();
                                for (TableFiled tableFiled : tableFiledList) {
                                    temp.add(rs.getInt(tableFiled.getEname()));
                                }
                                insertList.add(temp);
                            }

                            // 编辑新增sql
                            publicMapper.publicInsertBatch(tableFiledList, insertList, tableInfo.getEname());

                            pageIndex++;
                            rs = stmt.executeQuery("select * from " + tableInfo.getEname() + " limit " + ((pageIndex - 1) * pageSize) + "," + pageSize);
                        }

                        // 更新es同步状态 es应该重新建个index模型DTO类吧
                        tableInfo.setIsSync(0);

                        // 更新数据库同步状态
                        tableInfo.setIsDbSynced(1);
                        tableInfoMapper.updateById(tableInfo);
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    } finally {
                        try {
                            assert rs != null;
                            rs.close();
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                        try {
                            stmt.close();
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                        try {
                            conn.close();
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }


    }

最后

以上就是个性酒窝为你收集整理的使用jdbc的方式同步数据到本地数据库(指定一次查询插入的数量)的全部内容,希望文章能够帮你解决使用jdbc的方式同步数据到本地数据库(指定一次查询插入的数量)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部