本文共 2105 字,大约阅读时间需要 7 分钟。
两种技术:
1.使用结果集的元数据:ResultSetMetaData
getColumnCount():获取列数getColumnLabel():获取列的别名//说明:如果sql中没给字段其别名,getColumnLabel()获取的就是列名
查询的图示:
/** * 针对于customers表的通用的查询操作 * @param sql 要执行的SQL语句 * @param args 多少个占位符 */public Customer queryForCustomer(String sql,Object...args){ Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = DBUtil.getConnection("test"); ps = conn.prepareStatement(sql); for (int i = 0; i < args.length; i++) { ps.setObject(i + 1,args[i]); } rs = ps.executeQuery(); //获取结果集的元数据 :ResultSetMetaData ResultSetMetaData rsmd = rs.getMetaData(); //通过ResultSetMetaData获取结果集中的列数 int columnCount = rsmd.getColumnCount(); if(rs.next()){ //方法一:// 下标取出,程序不健壮/*String ename = rs.getString(1);String job = rs.getString(2);String sal = rs.getString(3);*///方法二:字段名称取出,当某一个字段名称重命名后,则用新的名称查询/*String ename = rs.getString("ename");String job = rs.getString("job");String sal = rs.getString("s");*/// 以指定的格式取出//String ename = rs.getString("ename");//String job = rs.getString("job");//Double sal = rs.getDouble("s "); Customer cust = new Customer(); for (int i = 0; i < columnCount; i++) { //获取每个列的列值:通过ResultSet Object columValue = rs.getObject(i + 1); //通过ResultSetMetaData //获取列的列名:getColumnName() --不推荐使用 //获取列的别名:getColumnLabel() String columnLabel = rsmd.getColumnLabel(i + 1); //通过反射,将对象指定名columnName的属性赋值为指定的值columnValue Field filed = Customer.class.getDeclaredField(columnLabel); filed.setAccessible(true); filed.set(cust,columValue); } return cust; } } catch (Exception e) { e.printStackTrace(); } finally { DBUtil.close(conn,ps,rs); } return null;}
转载地址:http://mxuki.baihongyu.com/