先导入druid的jar包(druid-1.0.9.jar)和druid.properties配置文件以及jdbcTemplate的jar包,添加到当前项目下。
Druid:数据库连接池实现技术,由阿里巴巴提供的
druid.properties:Druid的配置文件
Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
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;
}
}