JAVA数据库连接(精简)

前言:

现一个单体springboot项目已开发完成,需求同步db2数据库的数据。

思考:

原写好的代码不改动的情况下实现

解决方案:

1.配置多数据源

​		pass原因:

​				a.不会频繁同步,每天同步一两次,配置多数据源 db2数据源资源浪费

​				b.需要添加配置文件,指定主数据源,db2数据源配置

​				c.项目有用flyway数据库版本控制需要更改配置文件

​				改动较多--放弃

​	2.在同步触发时写原生数据库连接,在方法执行结束后关闭连接

​		采用:

​			a.不改动原代码

​			b.资源不浪费

实现步骤

1.封装公共数据库连接类

public class DataConnections {

    /**
     * 根据提供的SQL查询从数据库中检索数据。
     *
     * @param sql       SQL查询语句
     * @param url       数据库URL
     * @param username  数据库用户名
     * @param password  数据库密码
     * @param rowMapper RowMapper接口的实现,用于将ResultSet映射到所需类型
     * @param <T>       返回的数据类型
     * @return 根据提供的SQL查询和RowMapper返回的数据列表
     * @throws SQLException 如果发生数据库访问错误
     */
    public <T> List<T> getData(String sql, String url, String username, String password,
            RowMapper<T> rowMapper) throws SQLException {
        List<T> dataList = new ArrayList<>();
        try (
        		Connection connection = DriverManager.getConnection(url, username, password);
                PreparedStatement preparedStatement = connection.prepareStatement(sql);
                ResultSet resultSet = preparedStatement.executeQuery()) {

            while (resultSet.next()) {
                T data = rowMapper.mapRow(resultSet);
                dataList.add(data);
            }
        } catch (SQLException e) {
            // 异常处理
            e.printStackTrace();
        }

        return dataList;
    }
    //注意这里没有进行 resultSet.close();preparedStatement.close();connection.close();
    //原因:在 Java 7 引入的 try-with-resources 结构中,如果你将 ResultSet、PreparedStatement 和 Connection 作为资源在 try 语句中初始化,它	   们会在 try 代码块结束时自动关闭,不需要显式调用 close 方法。
}

2.实现

@Component
public class ExamineHiddenRecordSync {

	//获取数据url
    @Value("${spring.datasource.vrs.url}")
    private String url;

	//用户名
    @Value("${spring.datasource.vrs.username}")
    private String username;

	//密码
    @Value("${spring.datasource.vrs.password}")
    private String password;

    DataConnections dataConnections;

    public ExamineHiddenRecordSync() {
        this.dataConnections = new DataConnections();
    }

    /**
     * 同步方法
     */
    public void sync() {
        //查询sql
        String sqlQuery = "SELECT * FROM t_visitor_apply";
        try {
        	//获取数据
            List<HiddenDangerRecord> data = dataConnections.getData(sqlQuery, url, username, password, this::convertEntity);
            System.out.println("data = " + data);

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 将ResultSet中的数据映射到Entity对象。
     *
     * @param resultSet ResultSet对象
     */
    private Entity convertEntity(ResultSet resultSet) throws SQLException {
        Entity entity = new Entity();
        System.out.println("resultSet.getString(\"name\") = " + resultSet.getString("name"));
        //想要拿到的值
        entity.setBuildingName(resultSet.getString("name"));
        return entity;
    }
}

3.配置文件

spring:  
  datasource:
  	vrs:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.1.242:3314/fire_archives?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useAffectedRows=true
        username: KF
        password: Mango252!@#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值