Java | JDBC connection pool tools

First introducing a jar druid (druid-1.0.9.jar) and druid.properties profile and jdbcTemplate jar package, added to the current project.

Druid: database connection pool implementation technology, provided by Ali Baba
druid.properties:Druid profile

Spring Framework simple package JDBC. It provides developers with a simplified JDBC objects of JDBCTemplate

package com.library.util;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

public class Utils {
    private static DataSource dataSource;

    // 初始化配置
    static {
        try {
            Properties properties = new Properties();
            properties.load(Utils.class.getClassLoader().getResourceAsStream("druid.properties"));
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 获取连接
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }

    // 释放资源
    public static void close(ResultSet resultSet, Statement statement, Connection connection) {
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    // 通用查询参数用Object数组存储
    public static <T> List<T> executeQuery(String sql, Object[] params, Class<T> clazz) {
        List<T> list = new ArrayList<>();
        ResultSet resultSet = null;
        PreparedStatement preparedStatement = null;
        Connection connection = null;
        try {
            connection = getConnection();
            preparedStatement = connection.prepareStatement(sql);
            if (params != null) {
                for (int i = 0; i < params.length; i++) {
                    preparedStatement.setObject(i + 1, params[i]);
                }
            }
            resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
                T t = clazz.newInstance();
                Field[] declaredFields = clazz.getDeclaredFields();
                for (int i = 0; i < declaredFields.length; i++) {
                    declaredFields[i].setAccessible(true);
                    declaredFields[i].set(t, resultSet.getObject(declaredFields[i].getName()));
                }
                list.add(t);
            }
        } catch (SQLException | InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
        } finally {
            close(resultSet, preparedStatement, connection);
        }
        return list;
    }

    // 通用查询参数用ArrayList集合存储
    public static <T> List<T> executeListQuery(String sql, ArrayList params, Class<T> clazz) {
        List<T> list = new ArrayList<>();
        ResultSet resultSet = null;
        PreparedStatement preparedStatement = null;
        Connection connection = null;
        try {
            connection = getConnection();
            preparedStatement = connection.prepareStatement(sql);
            if (!params.isEmpty()) {
                for (int i = 0; i < params.size(); i++) {
                    preparedStatement.setObject(i + 1, params.get(i));
                }
            }
            resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
                T t = clazz.newInstance();
                Field[] declaredFields = clazz.getDeclaredFields();
                for (int i = 0; i < declaredFields.length; i++) {
                    declaredFields[i].setAccessible(true);
                    declaredFields[i].set(t, resultSet.getObject(declaredFields[i].getName()));
                }
                list.add(t);
            }
        } catch (SQLException | InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
        } finally {
            close(resultSet, preparedStatement, connection);
        }
        return list;
    }

    // 通用增删改
    public static int executeUpdate(String sql, Object[] params) {
        PreparedStatement preparedStatement = null;
        Connection connection = null;
        int num = -1;
        try {
            connection = getConnection();
            preparedStatement = connection.prepareStatement(sql);
            if (params != null) {
                for (int i = 0; i < params.length; i++) {
                    preparedStatement.setObject(i + 1, params[i]);
                }
            }
            num = preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            close(null, preparedStatement, connection);
        }
        return num;
    }

    // 获取数据资源
    public static DataSource getDataSource() {
        return dataSource;
    }
}
Published 17 original articles · won praise 5 · Views 4239

Guess you like

Origin blog.csdn.net/y1534414425/article/details/103491931