// 统一来执行DML语句;
public static boolean executeDML(String sql, Object... params) throws SQLException {
// 获取连接
Connection connection = DBUtils.getConnection();
// 获取我们的预处理对象
PreparedStatement ps = connection.prepareStatement(sql);
// 完成了设置参数的过程
setParams(ps, params);
// 执行sql语句,返回执行的结果
return ps.executeUpdate() > 0;
}
/**
* 给ps设置参数
*
* @param ps 预处理对象
* @param params 可变长度的数组
* @throws SQLException
*/
private static void setParams(PreparedStatement ps, Object... params) throws SQLException {
if (null != params) {
for (int i = 0; i < params.length; i++) {
ps.setObject(i + 1, params[i]); // 给ps对象,循环设置参数;
}
}
DQL 封装
public class JDBCExecuteUtils {
/**
* 封装的通用的查询一条纪录的方法
* @param <T> 泛型
* @param cls 实体类的字节码对象
* @param sql sql语句
* @param params sql语句对应的参数
* @return 查询到的一条纪录
* @throws Exception
*/
public static <T> T executeDQLByOne(Class<T> cls, String sql, Object... params) throws Exception{
List<T> list = executeDQL(cls,sql,params);
if(null != list && list.size() > 0) {
return list.get(0);
}
return null;
}
/**
* 封装的通用的查询的方法
* @param <T> 泛型
* @param cls 实体类的字节码对象
* @param sql sql语句
* @param params sql语句对应的参数
* @return 查询到的集合
* @throws Exception
*/
public static <T> List<T> executeDQL(Class<T> cls, String sql, Object... params) throws Exception {
// 获取连接
Connection connection = DBUtils.getConnection();
// 获取我们的预处理对象
PreparedStatement ps = connection.prepareStatement(sql);
// 完成了设置参数的过程
setParams(ps, params);
// 执行查询,获取结果集
ResultSet rs = ps.executeQuery();
// 获取我们查询结果的表(字段)信息
ResultSetMetaData md = ps.getMetaData();
// 将查询的数据,封装到List里面来;
List<T> list = new ArrayList<T>();
T obj;
Field field;
String name;
Object value;
while (rs.next()) { // 遍历我们的记录行
obj = cls.newInstance();
for (int i = 1; i <= md.getColumnCount(); i++) {
name = md.getColumnLabel(i);// 就是我们的字段名称;
try {
field = cls.getDeclaredField(name); // 如果发生了异常,表示我们实体类里面,没有这个字段
field.setAccessible(true);
value = rs.getObject(name);
if (value == null) { // 不能一刀切;
int type = md.getColumnType(i); // 这个方法会返回我们当前列的类型;
// 如果符合我们的某个类型
if (checkType(type)) {
// value = 0;
continue;
}
}
//给对象的字段设置值
field.set(obj, value);
} catch (NoSuchFieldException e) {
}
}
list.add(obj); // 将我们一个实例,添加到集合里面
}
return list;
}
// 判断type是其中的某一个类型
private static boolean checkType(int type) {
return Types.INTEGER == type || Types.FLOAT == type || Types.DECIMAL == type || Types.DOUBLE == type
|| Types.REAL == type;
}
/**
* 给ps设置参数
*
* @param ps 预处理对象
* @param params 可变长度的数组
* @throws SQLException
*/
private static void setParams(PreparedStatement ps, Object... params) throws SQLException {
if (null != params) {
for (int i = 0; i < params.length; i++) {
ps.setObject(i + 1, params[i]); // 给ps对象,循环设置参数;
}
}
}