数据库工具类
需要使用的jar包:
1.可以为实体类快速赋值
commons-beanutils-1.9.4.jar
commons-logging-1.2.jar
2.阿里数据库连接池
druid-1.0.9.jar
3.servlet
javax.servlet-api-4.0.1.jar
4.数据库连接对象
mysql-connector-java-5.1.49.jar
package util;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import model.LoginModel;
import org.apache.commons.beanutils.BeanUtils;
import javax.sql.DataSource;
import java.lang.reflect.InvocationTargetException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
public class DruidUtil {
private static DataSource dataSource ;
static {
Properties prop = new Properties();
try {
prop.load(DruidUtil.class.getClassLoader().getResourceAsStream("druid.properties"));
dataSource = DruidDataSourceFactory.createDataSource(prop);
} catch (Exception e) {
e.printStackTrace();
}
}
public static boolean addOrDeleteOrUpdate(String sql,Object... params){//params:参数
Connection conn = null;
PreparedStatement ps = null;
try {
conn = dataSource.getConnection();
ps = conn.prepareStatement(sql);
//可变参数的本质就是一个数组,一样可以获取他的长度、通过下标获取值
for (int i = 1; i <= params.length; i++) {
ps.setObject(i, params[i-1]);
}
int i = ps.executeUpdate();
if (i>0) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DruidUtil.close(conn, ps, null);
}
return false;
}
public static <T>List<T> select(Class<T> clazz,String sql,Object... params){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
LoginModel emp = new LoginModel();
List<T> list = new ArrayList<>();
try {
conn = dataSource.getConnection();
ps = conn.prepareStatement(sql);
for (int i = 1; i <= params.length; i++) {
ps.setObject(i, params[i-1]);
}
rs = ps.executeQuery();
//通过结果集获取表的元数据,元数据就是介绍表中数据的数据,就是表头
ResultSetMetaData metaData = rs.getMetaData();
//获取表中的列数
int columnCount = metaData.getColumnCount();
while (rs.next()){
//利用反射创建对象
T bean = clazz.newInstance();
//通过循环遍历出表中的数据
for (int i = 1; i <= columnCount; i++) {
Object values = rs.getObject(i);
//然后把值放进传进来的对象中
//通过commons-beanutils-1.9.4.jar和commons-logging-1.2.jar两个jar包中的方法来给对象设置值
//这里要注意的是需要往里面传三个参数才能完成赋值,1:那个不知道类型的类,2:列名,3:这一列的值
//按照我们写的这个代码的逻辑来看,实际往对象中添加数据是一行一行的往里面添加
BeanUtils.setProperty(bean, metaData.getColumnName(i), values);
}
//完成给对象的赋值操作后,最后把对象添加到集合中去
//使用这种方法,以后无论是查询一条数据还是查询全部数据又或者是查询其他表里面的数据都可以使用这个方法
list.add(bean);
}
} catch (SQLException e) {
e.printStackTrace();
}catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}catch (InvocationTargetException e) {
e.printStackTrace();
}finally {
DruidUtil.close(conn, ps, rs);
}
return list;
}
//关闭资源
public static void close(Connection conn, PreparedStatement ps, ResultSet rs){
try {
if (rs != null) rs.close();
if (ps != null) ps.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}