最近在做ETL的时候,用到了传统的JDBC,对某些模块做了一些封装,这里做一下记录。
大家拿回去用的话,直接copy过去,改一下DataConf就行了,这就是封装的魅力!
1、数据库配置类——DataConf
package com.bq.data.kmx.conf;
public class DataConf {
public static final String DRIVER="org.postgresql.Driver";
public static final String URL="jdbc:postgresql://*.*.*.*:5432/数据库名称?rewriteBatchedStatements=true";
public static final String USERNAME="postgres";
public static final String PASSWORD="123456";
}
2、数据库管理类——DataBaseManager
package com.bq.data.kmx.manager;
import com.bq.data.kmx.conf.DataConf;
import java.sql.*;
public class DataBaseManager {
/**
* 静态块,加载数据库连接驱动
* */
static {
try {
Class.forName(DataConf.DRIVER);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 返回一个数据库连接
* */
public static Connection getConnection(){
Connection connection=null;
try {
connection= DriverManager.getConnection(DataConf.URL,DataConf.USERNAME,DataConf.PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
/**
* 关闭数据库资源
* */
public static void close(Connection connection, Statement statement,ResultSet resultSet){
try {
if (connection!=null){
connection.close();
}
if (statement!=null){
statement.close();
}
if (resultSet!=null){
resultSet.close();
}
}catch (SQLException e){
e.printStackTrace();
}
}
}
3、数据库操作工具类——DataBaseUtil
package com.bq.data.kmx.util;
import com.bq.data.kmx.manager.DataBaseManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DataBaseUtil {
//数据库连接对象
private Connection connection;
/**
* 构造函数,传入一个Connection连接
* */
public DataBaseUtil(Connection connection){
this.connection=connection;
}
public DataBaseUtil(){}
/** 执行增删改的方法
* @param sql SQL语句
* @param params 参数
* @return 受影响的行数
* */
public int exceute(String sql,Object[] params) throws SQLException {
int result=0;
PreparedStatement statement=null;
try {
statement=connection.prepareCall(sql);
//遍历参数数组,为预编译的SQL语句绑定参数
if (params!=null){
if (params.length!=0){
for (int i = 0; i <params.length ; i++) {
statement.setObject(i+1,params[i]);
}
}
}
//执行SQL语句
result=statement.executeUpdate();
}catch (SQLException e){
throw new SQLException(e);
}finally {
DataBaseManager.close(null,statement,null);
}
return result;
}
/**
* 用于批处理,为PreparedStatement对象设置SQL参数
* */
public static void setParams(Object[] params,PreparedStatement statement) throws SQLException {
//遍历参数数组,为预编译的SQL语句绑定参数
if (params!=null){
if (params.length!=0){
for (int i = 0; i <params.length ; i++) {
statement.setObject(i+1,params[i]);
}
}
}
}
/**
* 查询结果集
* */
public ResultSet select(PreparedStatement preparedStatement){
ResultSet resultSet=null;
try {
resultSet=preparedStatement.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return resultSet;
}
}