Java JDBC DML DQL封装方法

// 统一来执行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对象,循环设置参数;

			}

		}
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值