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

Posted 好好学习,天天向上

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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("\\n" + columnLabel + "\\t");
                    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("\\t"+fieldName+"-->"+fieldValue);

                }
                System.out.print("\\n******************");
            }

        } 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
******************

 


以上是关于JDBC课程5--利用反射及JDBC元数据(ResultSetMetaData)编写通用的查询方法的主要内容,如果未能解决你的问题,请参考以下文章

JDBC学习笔记——利用反射及JDBC元数据编写通用的查询方法

javaWeb_JDBC_利用反射以及JDBC元数据编写通用的查询方法

JDBC — 学习大纲

jdbc操作mysql:利用反射封装

JDBC 利用反射 配置文件

jdbc利用java反射实现结果集得到处理:bug:argument type mismatch