Jdbc系列六:ResultSetMetaData类

Jdbc系列六:ResultSetMetaData类一 使用 JDBC 驱动程序处理元数据 Java 通过 JDBC 获得连接以后 得到一个 Connection 对象 可以从这个对象获得有关数据库管理系统的各种信息 包括数据库中的各个表 表中的各个列 数据类型 触发器 存储过程等各方面的信息 根据这些信息 JDBC 可以访问一个实现事先并不了解的数据库 获取这些信息的方法都是在 DatabaseMeta 类的对象上实现的 而 DataBaseMe

/ * DatabaseMetaData 是描述 数据库 的元数据对象。可以由 Connection 得到。 */ @Test public void testDatabaseMetaData(){ Connection connection = null; ResultSet resultSet = null; try { connection = JDBCTools.getConnection(); DatabaseMetaData data = connection.getMetaData(); //可以得到数据库本身的一些基本信息 //1. 得到数据库的版本号 int version = data.getDatabaseMajorVersion(); System.out.println(version); //2. 得到连接到数据库的用户名 String user = data.getUserName(); System.out.println(user); //3. 得到 MySQL 中有哪些数据库 resultSet = data.getCatalogs(); while(resultSet.next()){ System.out.println(resultSet.getString(1)); } } catch (Exception e) { e.printStackTrace(); } finally{ JDBCTools.release(resultSet, null, connection); } } 

在这里插入图片描述
三、ResultSetMetaData 类
可用于获取关于 ResultSet 对象中列的类型和属性信息的对象:
 getColumnName(int column):获取指定列的名称
 getColumnCount():返回当前 ResultSet 对象中的列数。
 getColumnTypeName(int column):检索指定列的数据库特定的类型名称。
 getColumnDisplaySize(int column):指示指定列的最大标准宽度,以字符为单位。
 isNullable(int column):指示指定列中的值是否可以为 null。
 isAutoIncrement(int column):指示是否自动为指定列进行编号,这样这些列仍然是只读的。







/ * ResultSetMetaData: 描述结果集的元数据. * 可以得到结果集中的基本信息: 结果集中有哪些列, 列名, 列的别名等. * 结合反射可以写出通用的查询方法. */ @Test public void testResultSetMetaData(){ Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { connection = JDBCTools.getConnection(); String sql = "SELECT id, name FROM user"; preparedStatement = connection.prepareStatement(sql); resultSet = preparedStatement.executeQuery(); //1. 得到 ResultSetMetaData 对象 ResultSetMetaData rsmd = resultSet.getMetaData(); //2. 得到列的个数 int columnCount = rsmd.getColumnCount(); System.out.println(columnCount); for(int i = 0 ; i < columnCount; i++){ //3. 得到列名 String columnName = rsmd.getColumnName(i + 1); //4. 得到列的别名 String columnLabel = rsmd.getColumnLabel(i + 1); System.out.println(columnName + ", " + columnLabel); } } catch (Exception e) { e.printStackTrace(); } finally{ JDBCTools.release(resultSet, preparedStatement, connection); } } 

在这里插入图片描述
四、使用BeanUtils操作javaBean
1、引入依赖

<dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.8.0</version> </dependency> 

2、实体类User

public class User { private String id; private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 

3、测试BeanUtils

@Test public void testBeanUtils() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException{ Object object = new User(); System.out.println(object); BeanUtils.setProperty(object, "name", "zhangsan"); System.out.println(object); Object val = BeanUtils.getProperty(object, "name"); System.out.println(val); } 

在这里插入图片描述
4、测试ResultSetMetaData

@Test public void testResultSetMetaData() { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { String sql = "SELECT id,name FROM user WHERE id = ?"; connection = JDBCTools.getConnection(); preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, 1); resultSet = preparedStatement.executeQuery(); Map<String, Object> values = new HashMap<String, Object>(); //1. 得到 ResultSetMetaData 对象 ResultSetMetaData rsmd = resultSet.getMetaData(); while(resultSet.next()){ //2. 打印每一列的列名 for(int i = 0; i < rsmd.getColumnCount(); i++){ String columnLabel = rsmd.getColumnLabel(i + 1); Object columnValue = resultSet.getObject(columnLabel); values.put(columnLabel, columnValue); } } System.out.println(values); Class clazz = User.class; Object object = clazz.newInstance(); for(Map.Entry<String, Object> entry: values.entrySet()){ String fieldName = entry.getKey(); Object fieldValue = entry.getValue(); System.out.println(fieldName + ": " + fieldValue); BeanUtils.setProperty(object,fieldName,fieldValue); } System.out.println(object); } catch (Exception e) { e.printStackTrace(); } finally { JDBCTools.release(resultSet, preparedStatement, connection); } } 

在这里插入图片描述
五、获取数据库自动生成的主键

/ * 获取数据库自动生成的主键 */ @Test public void testGetKeyValue() { Connection connection = null; PreparedStatement preparedStatement = null; try { connection = JDBCTools.getConnection(); String sql = "INSERT INTO user(name) VALUES(?)"; //使用重载的 prepareStatement(sql, flag) //来生成 PreparedStatement 对象 preparedStatement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); preparedStatement.setString(1, "ABC"); preparedStatement.executeUpdate(); //通过 getGeneratedKeys() 获取包含了新生成的主键的 ResultSet 对象 //在 ResultSet 中只有一列 GENERATED_KEY, 用于存放新生成的主键值. ResultSet rs = preparedStatement.getGeneratedKeys(); if(rs.next()){ System.out.println(rs.getObject(1)); } ResultSetMetaData rsmd = rs.getMetaData(); for(int i = 0; i < rsmd.getColumnCount(); i++){ System.out.println(rsmd.getColumnName(i + 1)); } } catch (Exception e) { e.printStackTrace(); } finally{ JDBCTools.release(null, preparedStatement, connection); } } 

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230440.html原文链接:https://javaforall.net

(0)
上一篇 2026年2月22日 下午7:01
下一篇 2026年2月22日 下午7:22


相关推荐

  • Matlab中句柄类

    Matlab中句柄类目录句柄类函数类方法句柄类类可以支持引用或值语义 针对应用程序创建适当类型的类 值类可用于创建与数值类具有相同语义的新数组类 句柄类用于定义引用 object 的对象 复制对象会创建对同一对象的另一个引用 函数 isequal 确定数组相等性 eq 确定相等性 类 handle 所有 handle 类的超类 matlab mixin SetGet 通过 set 和 get 方法提供句柄类 matlab mixi

    2026年3月18日
    2
  • 讯飞智能翻译

    讯飞智能翻译

    2026年3月14日
    2
  • Mathtype公式编辑器常用快捷键

    Mathtype公式编辑器常用快捷键文章目录Mathtype公式编辑器常用快捷键1.放大或缩小尺寸2.在数学公式中插入一些符号3.微移间隔4.元素间的跳转用键盘选取菜单或工具条贴加常用公式Mathtype公式编辑器常用快捷键1.放大或缩小尺寸Ctrl+1(100%);Ctrl+2(200%);Ctrl+4(400%);Ctrl+8(800%)。2.在数学公式中插入一些符号Ctrl+9或Ctrl+0(小括号);Ctrl+[或Ctrl+](中括号);Ctrl+{或Ctrl+}(大括号);Ctrl+F(分式);Ctrl+/(斜杠

    2025年6月18日
    3
  • 《人工智能基础》【工具篇15]:OpenClaw常用命令速查

    《人工智能基础》【工具篇15]:OpenClaw常用命令速查

    2026年3月14日
    3
  • Agent智能体开发:让CasRel模型成为自主信息收集与处理的核心

    Agent智能体开发:让CasRel模型成为自主信息收集与处理的核心

    2026年3月16日
    2
  • c++二分法查找_二分法查找python代码

    c++二分法查找_二分法查找python代码二分法:二分法应用条件:1)数组为有序数组。2)同时题目还强调数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的。区间的定义:区间的定义不同代码就不同。1)定义target在[left,right]区间while(left<=right)要使用<=,因为left==right是有意义的,所以使用<=。if(nums[middle]>target)right要赋值为middle-1,因为当前这个nums[mid

    2025年6月17日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号