从数据库得到的结果集存放到List集合中

一、业务阐述

  在开发中查询的数据库结果集,既要连接数据库、执行数据库操作、关闭数据库,还要把结果集的记录人为的设置到自己封装的DAO中等一系列的重复代码。

本文主要是想解决:用户只需要得到数据库连接,写sql语句,自己封装dao,其余的操作由封转的小框架解决这些重复的工作,用户得到的只是一个集合List。

List里面的元素有集合Map其中key是数据库中的字段类型,value是字段类型对应的值这个函数

DBUtil.executeQuery(con, sql)

List还提供集合元素存放的是dao对象,一条数据库记录对应一个dao对象,此函数是

DBUtil.executeQuery(con, sql,Vehicle.class)

以下提供源码的叙述

 二、源码解说

 测试类

package com.hewen.dao.manage;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;


public class Main 
{
	public static void main(String[] args) 
	{
		Connection con;
		try {
			con = DBTest.getCon();
		} catch (SQLException e) {
			e.printStackTrace();
			return;
		}
		PreparedStatement pst = null;
		ResultSet rs = null;
		String sql = "select * from t_vehicle t where t.vehicle_id<4";
		/**
		 * 该方法用到的技术是通过结果集的列属性的性质得到,没有用到反射机制
		 * 这个测试用例也是把查询的结果集放到List集合
		 * 里面的元素是集合Map,key是数据库中的字段类型,value是
	     * 字段类型对应的值,
	     * 查询的结果如:[{KIND_ID=1, DEF_FLAG=null, CHANNELNO=1, SN=陆震,(822)22911,13771000789, 
	     * BUYDATE=2010-02-26, DELETETIME=null, STAMP=2010-02-26, REGDATE=null, ISDELETED=0, 
	     * VEHICLE_ID=2, NUMBER_PLATE=苏B10001, VEHICLESTATE=待命状态(对应现场返回), USEDATE=2010-02-26, 
	     * INTERPHONENO=null, NUMBER_PLATE_TYPE_ID=4, TEL2=null, STYLE=null, COLOR=null, 
	     * INTERPHONEID=null, LASTMAINTAINTIME=null, INITDISTANCE=0, LAST_UPDATE_TIME=2010-02-26,
	     *  REMARK=null, TEL=null, SUPERVISER=null}, 
	     *  {KIND_ID=3, DEF_FLAG=null, CHANNELNO=1, SN=陆震,
	     *  (822)22911,13771000789, BUYDATE=2010-02-26, DELETETIME=null, STAMP=2010-02-26, 
	     *  REGDATE=null, ISDELETED=0, VEHICLE_ID=3, NUMBER_PLATE=苏B90003, 
	     *  VEHICLESTATE=待命状态(对应现场返回), USEDATE=2010-02-26, INTERPHONENO=null, 
	     *  NUMBER_PLATE_TYPE_ID=4, TEL2=13151000793, STYLE=面包车, COLOR=白, INTERPHONEID=null, 
	     *  LASTMAINTAINTIME=null, INITDISTANCE=0, LAST_UPDATE_TIME=2010-02-26, REMARK=null,
	     *   TEL=22916, SUPERVISER=杨兴华}]
		 */
		try {
			List list=DBUtil.executeQuery(con, sql);
			System.out.println(list);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		/**
		 * 这个测试用例只是把查询的结果集中的某一条记录映射到了dao对象中,
		 * 查询的结果如:
		 * vehicle:vehicle_id: 2 numberPlate: 苏B10001 deleteDate: null
           vehicle:vehicle_id: 3 numberPlate: 苏B90003 deleteDate: null
		 */
	/*	try {
			pst = con.prepareStatement(sql);
			rs = pst.executeQuery();
			while(rs.next()){
				Vehicle r = (Vehicle) DBUtil.getFirstObjectFromRs(rs, Vehicle.class);
				System.out.println("vehicle:" + r);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DBUtil.closeRs(rs);
			DBUtil.closePst(pst);
			DBUtil.closeCon(con);
		}*/
		/**
		 * 方法是用的反射机制
		 * 这个测试用例是测试executeQuery函数,把查询的结果集放到List集合
		 * 并且集合元素存放的是dao对象,一条数据库记录对应一个dao对象,
		 * 打印出来的结果如:
		 * [vehicle_id: 2 numberPlate: 苏B10001 deleteDate: null, 
		 * vehicle_id: 3 numberPlate: 苏B90003 deleteDate: null]
		 * 
		 */
	/*	try {
			List list=DBUtil.executeQuery(con, sql,Vehicle.class);
			System.out.println(list);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}*/
	}
}

 封装dao DBUtil类

package com.hewen.dao.manage;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/***
 * 注意利用查询出数据库的一条记录映射到相应的dao中,写相应的dao一定要注意字段,一定
 * 要与数据库的记录字段相对应,大小写可以忽略,但是字段不一致就返回错误的数据
 * 
 * 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值