用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

java 泛型类反射封装结果集

2015-01-24 作者: java源代码大全举报

[java]代码库

/**
 * @param args
 */
public static void main(String[] args) {
    String sql="select * from user where name=1";
    try {
        User user=BaseDao.getClass(sql, User.class);
        System.out.println(user.getName());
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}   
       /**
 * 使用泛型类封装查询结果
 * @param <T>
 * @throws Exception 
 */
public static <T> T getClass(String sql, Class<T> clazz) throws Exception {
    PreparedStatement ps = null;
    ResultSet rs = null;
    Connection con=JDBCUtil.getConnection();
    ps=con.prepareStatement(sql);
    rs=ps.executeQuery();
    //结果集的字段
    ResultSetMetaData md=rs.getMetaData();
    //将字段添加到string数组
    String[] mdString=new String[md.getColumnCount()];
    for(int i=0;i<md.getColumnCount();i++) {
        mdString[i]=md.getColumnLabel(i+1);
    }
    //声明一个泛型类
    T t=null;
    //获得传入类的方法集合
    Method[] methods=clazz.getMethods();
    if(rs.next()) {
        t=clazz.newInstance();
        for(int j=0;j<mdString.length;j++) {
            String clsMethod=mdString[j];
            //将结果集的字段首字母替换成大写并且以set开头(例:setName对象类里面的set方法)
            clsMethod="set"+clsMethod.replaceFirst(clsMethod.substring(0,1), clsMethod.substring(0, 1).toUpperCase());
            for(Method m:methods) {
                //匹配传入类的方法集合如果匹配成功则执行。
                if(clsMethod.equals(m.getName())) {
                    m.invoke(t, rs.getObject(j+1));
                }
            }
        }
    }
    return t;
}

//源代码片段来自云代码http://yuncode.net
			


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...