• JDBC课程5--利用反射及JDBC元数据(ResultSetMetaData)编写通用的查询方法


    /**-利用反射及JDBC元数据编写通用的查询方法
    * 1.先利用SQl语句进行查询,得到结果集-->
    * 2.查找到结果集的别名:id-->
    * 3.利用反射创建实体类的对象,创建author对象-->
    * 4.获取结果集的列的别名: id,nation,name
    * 5.再获得结果集的每一列的值,
    * 结合2得到一个map键值对: 键: 列的别名,值: 列的值: {id=1,nation=中国,name=莫言}
    * 6.再利用反射为2的对应的属性赋值,属性为Map 的键,值为Map 的值!
    *    7.针对每轮查询,遍历map结果集,整合进对象,进行输出或者其他操作;
    */

    代码:

    /**ResultSetMetaData 简介
     *      定义: 是描述ResultSet 的元数据对象,即从中可以或许到结果集中有多少列,列名是什么...
     *      用法:
     *          得到ResultSetMetaData 对象: 调用ResultSet的 getMetaData()方法即可!
     *      ResultSetMetaData的常用方法:
     *          >int getColumnCount() : SQL语句中包含的列的总个数
     *          >String getColumnLabel(int column) : 获取指定的列的别名,其中索引从1开始;
     *
     */
    public class testResultSetMetaData {
        @Test
        public void testResultSetMetaData(){
            Connection connection=null;
            PreparedStatement preparedStatement=null;
            ResultSet resultSet=null;
            try {
                String sql="select id,author_name name,nation "+
                        "from author where id <= ?";
                connection = JDBCTools.getConnection();
                preparedStatement=connection.prepareStatement(sql);
                preparedStatement.setInt(1,5 );
                resultSet=preparedStatement.executeQuery();
    
                Map<String,Object> values=new HashMap<String,Object>();
                //1. 得到ResultSetMetaData 对象
                while (resultSet.next()) {
                    //2.打印每一列的列名
                    ResultSetMetaData rsmd=resultSet.getMetaData();
                    for (int i = 0; i < rsmd.getColumnCount(); i++) {
                        String columnLabel = rsmd.getColumnLabel(i + 1);   //获取列表标签名称
                      //  System.out.print("
    " + columnLabel + "	");
                        Object columnValue=resultSet.getObject(columnLabel);  //根据名称,获取列值,存入HashMap
                        values.put(columnLabel,columnValue );
                    }
                    //System.out.println(values);  //获取一组结果 ,重复的键值对会被后面的覆盖掉
                    Class clazz=author.class;
                    Object object=clazz.newInstance();
                    for(Map.Entry<String,Object> entry: values.entrySet()){
                        String fieldName = entry.getKey();
                        Object fieldValue = entry.getValue();
                        System.out.print("	"+fieldName+"-->"+fieldValue);
    
                    }
                    System.out.print("
    ******************");
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                JDBCTools.release(resultSet,preparedStatement ,connection);
            }
        }
    }

    结果:

    com.mysql.jdbc.JDBC4Connection@19e1023e    
    
                          nation-->中国    name-->莫言    id-->1
    ******************    nation-->中国    name-->村上春树    id-->2
    ******************    nation-->中国    name-->山枫叶纷飞    id-->3
    ******************    nation-->北京    name-->刘慈欣    id-->4
    ******************    nation-->元星    name-->瑞    id-->5
    ******************
    
    
  • 相关阅读:
    jquery 滚动条插件 jquery.nanoscroller.js
    Lost connection to MySQL server at 'reading initial communication packet' 错误解决
    ajax上传图片 jquery插件 jquery.form.js 的方法 ajaxSubmit; AjaxForm与AjaxSubmit的差异
    转:MVC3系列:~Html.BeginForm与Ajax.BeginForm
    转:MVC2表单验证失败后,直接返回View,已填写的内容就会清空,可以这样做;MVC2输出文本;MVC2输出PDF文件
    Java中的Dom4j
    Java插件之Jrebel
    Idea中的一些快捷键
    Java中的XML
    SQL Server 表值函数
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/9990453.html
Copyright © 2020-2023  润新知