JDBC------之结果集元数据的操作01
在结果集中,有修饰于结果集的数据,举个例子:
String name ="迎风少年";
在上面的一行语句中我们可以理解为String 和 name是"迎风少年"的元数据,因为他们的存在是为了修饰"迎风少年"而存在的。
那么我们看一下结果集(查询结果):
所以第一行的列名其实是属于结果集元数据的。
Resultset结果集可以使用方法getMetaData();来获得元数据对象,接下来我们通过编写查询student表的通用方法对元数据进行讲解:
代码如下:
package com.itheima.hui; import com.itheima.hui.beans.Student; import com.itheima.hui.utils.JDBCUtils; import java.lang.reflect.Field; import java.sql.*; public class JDBCSelectTheSame { public static void main(String[] args) { String sql="select * from student where id=?"; Object o = JDBCSelectTheSame.JDBCSelect(sql, 4); System.out.println(o); } //创建JDBC查询功能的通用方法 public static Object JDBCSelect(String sql, Object... args) { Connection connect = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; Student student = null; //获取连接对象 try { connect = JDBCUtils.getConnect(); preparedStatement = connect.prepareStatement(sql); for (int i = 0; i < args.length; i++) { preparedStatement.setObject(i + 1, args[i]); } resultSet = preparedStatement.executeQuery(); //获取结果元数据 ResultSetMetaData metaData = resultSet.getMetaData(); //根据结果元数据获得列数 int columnCount = metaData.getColumnCount(); if (resultSet.next()) { student = new Student(); for (int i = 0; i < columnCount; i++) { Object object = resultSet.getObject(i + 1); //根据元数据获得当前列的列名 String columnName = metaData.getColumnName(i + 1); //通过反射为student类的对应属性赋值 Class<Student> clazz = Student.class; Field field = clazz.getDeclaredField(columnName); field.setAccessible(true); field.set(student, object); } } } catch (Exception e) { e.printStackTrace(); } finally { JDBCUtils.close(connect, preparedStatement, resultSet); } return student; } }
我们可以通过元数据对象获得结果集中的数据的每一列的列名,一共有多少列等。
其中获得列名的方法是:String columnName = metaData.getColumnName(int index); 根据列的索引获得列名,索引起始值是1.
获得列的总数的方法是:int columnCount = metaData.getColumnCount();
迎风少年