JavaEE之元数据

元数据

什么是元数据?

一、数据库相关的信息:(封装到数据库元对象: DataBaseMetaData)
数据库的版本
驱动程序的版本
二、参数相关的信息:(封装到参数元对象:ParameterMetaData)
参数数量
参数类型
三、结果相关的信息:(封装到结果集元对象: ResultSetMetaData)
列数量
列名称
jdbc步骤:
1)连接数据库,获取Connection对象  (得到DataBaseMetaData)
2)创建Statment,预编译sql语句 (得到ParameterMetaData)
3)设置参数
4)执行sql,返回结果集 (得到ResultSetMetaData)
5)遍历结果集

6)关闭连接

练习:
抽取两个通用的jdbc方法
    1)通用的修改方法(insert、update、delete)
update()  用于任何表的任何更新操作
    2)通用的查询方法,查询后返回List集合
find()  无论查询什么表,都能返回我们需要的List集合

提示:使用元数据

/**
 * jdbc的工具方法
 * @author APPle
 *
 */
public class DBUtil {
	private static ComboPooledDataSource ds = new ComboPooledDataSource();

	/**
	 * 通用的更新方法
	 * 不同更新操作的不同点:
	 * 	1)sql语句不同
	 *  2)参数列表不同
	 */
	public static void update(String sql,Object[] values){
		Connection conn = null;
		PreparedStatement stmt = null;
		try {
			//获取连接
			conn = ds.getConnection();
			//预编译sql
			stmt = conn.prepareStatement(sql);
			//设置参数
			ParameterMetaData md = stmt.getParameterMetaData();
			//得到参数数量
			int count = md.getParameterCount();
			if(values!=null){
				for(int i=1;i<=count;i++){
					stmt.setObject(i, values[i-1]);
				}
			}
			//执行sql
			stmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		} finally{
			if(stmt!=null)
				try {
					stmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
					throw new RuntimeException(e);
				}
			if(conn!=null)
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
					throw new RuntimeException(e);
				}
		}
		
	}
	
	/**
	 * 通用的查询方法
	 * 不同点:
	 * 	  1)sql语句不同
	 * 	  2)参数不同
	 * 	  3)List集合中的对象不同
	 */
	public static List find(String sql,Object[] values,Class clazz){
		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		List list = new ArrayList();
		try {
			//获取连接
			conn = ds.getConnection();
			//预编译sql
			stmt = conn.prepareStatement(sql);
			//设置参数
			ParameterMetaData md = stmt.getParameterMetaData();
			int count = md.getParameterCount();
			if(values!=null){
				for(int i=1;i<=count;i++){
					stmt.setObject(i, values[i-1]);
				}
			}
			//执行sql
			rs = stmt.executeQuery();
			//得到结果集的元数据
			ResultSetMetaData rsmd = rs.getMetaData();
			//得到列数据
			int columnCount = rsmd.getColumnCount();
			//遍历结果集
			while(rs.next()){
				//创建一个javabean对象
				Object obj = clazz.newInstance();
				//把每行的结果放入javabean对象
				//遍历每列
				for(int i=1;i<=columnCount;i++){
					//得到列名称
					String columnName = rsmd.getColumnName(i);
					//得到列内容
					Object value = rs.getObject(columnName);
					//把列内容赋值给javabean
					/**
					 * 约定前提: 数据库表的字段名称和javabean的属性名称保持一致!!!!
					 */
					BeanUtils.copyProperty(obj, columnName, value);
				}
				
				//把javabean放入list集合	
				list.add(obj);
			}
			return list;
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		} finally{
			if(stmt!=null)
				try {
					stmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
					throw new RuntimeException(e);
				}
			if(conn!=null)
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
					throw new RuntimeException(e);
				}
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值