使用自己封装JDBC,且对数据库进行增删改查
用到的jar包:
BeanUtils:用来获取或设置未知对象的值
JDBCUtils:自己写的获取数据库连接,和关闭资源功能
直接上代码
package com.hare.basedao;
import com.hare.jdbcutils.JDBCUtils;
import org.apache.commons.beanutils.BeanUtils;
import java.lang.reflect.InvocationTargetException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class BaseDao {
/**
* 对数据库进行增删改
* @param sql 执行sql的语句
* @param obj 执行sql的值
* @return 影响行数
*/
public static int update(String sql,Object[] obj){
int count = 0;
if(sql != null){
//1.获取数据库连接
Connection conn = JDBCUtils.getConnection();
try {
//2.获取sql语句
PreparedStatement ps = conn.prepareStatement(sql);
//3.获取sql语句的个数
ParameterMetaData pmd = ps.getParameterMetaData();
int pc = pmd.getParameterCount();
//4.分别开始进行赋值
for (int i = 1; i <= pc; i++) {
//4.1使用setObject方法进行赋值 i,代表第几个,obj[]取到的值
ps.setObject(i,obj[i-1]);
}
//4.2使用executeUpdate执行sql语句
count = ps.executeUpdate();
//5.关闭流
JDBCUtils.close(conn,ps);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
return count;
}
/**
* 对数据库进行查询
* @param sql 执行SQL语句
* @param obj 接收用户输入的值
* @param tClass 数据库字段的对象
* @return 查询集合
*/
public static <T> List<T> query(String sql ,Object[] obj, Class<T> tClass){
List<T> ts = new ArrayList<>();
//空指针异常
if(sql == null || tClass==null){
throw new NullPointerException();
}
//1.获取连接
Connection conn = JDBCUtils.getConnection();
try {
//2.预处理SQL
PreparedStatement ps = conn.prepareStatement(sql);
//2.0处理object[]
int pc = ps.getParameterMetaData().getParameterCount();
for (int i = 1; i <= pc; i++) {
ps.setObject(i,obj[i-1]);
}
//2.1执行sql
ResultSet rs = ps.executeQuery();
//3.处理对象
//3.1反射把对象new处理
T t = tClass.getConstructor(null).newInstance(null);
//3.2获取字段
ResultSetMetaData metaData = rs.getMetaData();
//3.3获取字段个数
int columnCount = metaData.getColumnCount();
while (rs.next()){
//4.进行取值和赋值
for (int i = 1; i <= columnCount; i++) {
//4.1根据每个字段每次取值赋值
BeanUtils.setProperty(t,metaData.getColumnName(i),rs.getObject(i));
}
//5.加入集合列表
ts.add(t);
}
//6.关闭资源
JDBCUtils.close(conn,ps,rs);
} catch (SQLException throwables) {
throwables.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return ts;
}
}