尚硅谷之JDBC

2.2尝试编写通用的查询方法

         /**

          * 执行查询操作的SQL语句,SQL可以带参数(?)

          * @param clazz Class 查询的结果需要封装的实体的Class类型,例如:学生Student,商品Goods,订单Order

          * @param sql String 执行查询操作的SQL语句

          * @param args Object... 对应的每个?设置的值,顺序要与?对应

          * @return T 封装了查询结果的实体

          * @throws Exception

          */

         public static <T> T get(Class<T> clazz,String sql,Object... args)throws Exception{

                   Connection conn = null;

                   PreparedStatement pst = null;

                   ResultSet rs = null;

                   T entity = null;

 

                   //1、获取连接

                   conn = JDBCUtils.getConnection();

                   //2、获取PreparedStatement对象,并预编译带参数?的SQL

                   pst = conn.prepareStatement(sql);

                   //3、设置参数?的值

                   if(args!=null && args.length>0){

                            for(int i=0;i<args.length;i++){

                                     pst.setObject(i+1, args[i]);

                            }

                   }

                   //4、执行SQL

                   rs = pst.executeQuery();

                   //5、获取结果,封装到对象中

                   if(rs.next()){

                            entity = clazz.newInstance();

 

                            /*

                             * 需要解决的问题?

                             * (1)查询了哪些列,即需要为哪些属性赋值,这些列对应的属性名是什么

                             * (2)获取这些列的值,用反射为属性赋值

                             *

                             * clazz:只能得到所有属性,不知道sql中查询了哪些列

                             * 只能依赖sql

                             */

                   }

 

                   JDBCUtils.free(rs, pst, conn);

 

                   return entity;

         }

2.3 ResultSetMetaData 类

可用于获取关于 ResultSet 对象中列的类型和属性信息的对象:

  • int getColumnCount()返回当前 ResultSet 对象中的列数。
  • String getColumnName(int column)获取指定列的名称。 数据库中的字段名
  • String getColumnLabel(int column)建议标题通常由 SQL AS 子句来指定。如果未指定 SQL AS,则返回列名
  • String getColumnTypeName(int column):检索指定列的数据库特定的类型名称。
  • int getColumnDisplaySize(int column):指示指定列的最大标准宽度,以字符为单位。
  • boolean isNullable(int column):指示指定列中的值是否可以为 null。

boolean isAutoIncrement(int column):指示是否自动为指定列进行编号,这样这些列仍然是只读的。