Java:基于JDBC数据连接池方式同步第三方数据库表信息数据

Java:基于JDBC数据连接池方式同步第三方数据库表信息数据_第1张图片

前言

  • 最近遇到一个需求就是要拉取第三方的数据信息,但是第三方那边又没有对外暴露对接接口,只给出了具体的数据库连接信息和具体表信息
  • 基于第三方给出的有效信息,我采取了用 JDBC 传统的方式去进行数据拉取
  • 注意:前置条件两端的网要互通,否则拉取无效

方案

  • 这里我抽取成了一个工具类,可以根据不同的业务场景进行调用
//参数举例
	private final static String url = "jdbc:mysql://[IP]:[端口号]/xxx?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&autoReconnect=true";
    private final static String className = "com.mysql.jdbc.Driver";
    private final static String user = "账号";
    private final static String password = "密码";


public class JdbcUtils {
    /**
     * 根据数据连接池信息获取数据
     *
     * @param jdbcDriver 驱动程序
     * @param dbUrl      数据库链接地址
     * @param user       账号
     * @param pass       密码
     * @param sql        执行SQL脚本
     * @return list 存储返回结果
     */
    public static List obtainDataBasedOnTheDataConnectionPoolInfo(String jdbcDriver, String dbUrl, String user, String pass, String sql) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            //1.加载驱动程序
            Class.forName(jdbcDriver);
            //2.获得数据库链接
            conn = DriverManager.getConnection(dbUrl, user, pass);
            //3.通过数据库的连接操作数据库,实现增删改查
            stmt = conn.createStatement();
            //4.执行查询sql语句 并把数据库表中记录返回到 ResultSet 对象中进行保存
            rs = stmt.executeQuery(sql);
            //5.获取表结构
            ResultSetMetaData metaData = rs.getMetaData();
            //6.获取字段数
            int columnCount = metaData.getColumnCount();
            //存储返回结果
            List list = new ArrayList();
            //7.处理数据库的返回结果
            while (rs.next()) {
                Map map = new HashMap();
                for (int i = 1; i <= columnCount; i++) {
                    //8.获取字段名称 metaData.getColumnName(i)
                    map.put(metaData.getColumnName(i), rs.getObject(i));
                }
                list.add(map);
            }
            LogUtils.log.info("JDBC工具类获取到的数据信息为:{}", JSON.toJSONString(list));
            return list;
        } catch (Exception e) {
            LogUtils.log.error("JDBC工具类处理 Class.forName 错误:{}", e);
        } finally {
            //9.关闭资源,调用自定义的close()方法
            close(rs);
            close(stmt);
            close(conn);
        }
        return null;
    }

    /**
     * 自定义资源关闭方法
     *
     * @param closeable
     */
    public static void close(AutoCloseable closeable) {
        if (closeable != null) {
            try {
                closeable.close();
            } catch (Exception e) {
                LogUtils.log.error("JDBC工具类获取对应数据信息,数据库连接池关闭资源异常:{}", e);
            }
        }
    }
}

你可能感兴趣的:(各大实战问题分析,java,mysql)