Java_17_数据库元数据&Mybatis框架:数据库元数据、Mybatis框架入门

本文详细介绍了数据库元数据,包括参数元数据和结果集元数据的获取和应用,以及如何利用元数据封装数据库操作。此外,文章还深入探讨了框架的概念和作用,特别是MyBatis框架的快速入门,包括MyBatis的下载、配置和使用方法,以及通过案例展示了MyBatis框架的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、数据库元数据

元数据:是指数据库、表、列的定义信息。即用来定义数据表的数据
在这里插入图片描述
回顾元注解
元注解是用来定义注解的注解

元数据分类

数据库元数据:可以获得数据库的版本,驱动版本等信息(了解)
参数元数据:用来获得占位符?的个数以及数据类型,参数指的是SQL语句中占位符?
结果集元数据:用来获得结果集中的列的数量,列的名称,以及列的类型

二、参数元数据–ParameterMetaData

ParameterMetaData(参数元数据)可用于获取有关Preparedstatement对象(预编译对象)中参数的个数和类型。

select * from user where name=? and password=?
// ParameterMetaData可以用来获取?的个数和类型

获取ParameterMetaData对象

通过 PreparedStatement(预编译对象)的getParameterMetaData() 方法来获取到 ParameterMetaData对象

ParameterMetaData getParameterMetaData() 

ParameterMetaData对象方法

获取PreparedStatement的SQL语句参数?的个数

//获得占位符?的个数
int getParameterCount() 

获取指定参数的SQL类型。

//获得指定第几个占位符的数据类型,从1开始
String getParameterTypeName(int param)//获得指定占位符的数据类型,索引从1开始(了解)
String getParameterTypeName(int index) 

注意事项:
不是所有的数据库驱动都能获取到参数类型(MySQL会出异常)

参数元数据ParameterMetaData代码示例1

public class Demo01 {
   
  public static void main(String[] args) throws Exception {
   
    Connection conn = DataSourceUtils.getConnection();
    String sql = "INSERT INTO  student (name, age, score) VALUES (?, ?, ?)";
    PreparedStatement stmt = conn.prepareStatement(sql);
    ParameterMetaData md = stmt.getParameterMetaData();
    System.out.println("参数个数: " + md.getParameterCount());

    // Parameter metadata not available for the given statement
    // MySQL不支持获取参数类型
    // System.out.println("参数类型: " + md.getParameterTypeName(1));
  }
}

参数元数据ParameterMetaData代码示例2

需求:得到SQL语句的参数元数据。
1、创建学生表:学号,姓名,性别,生日

-- 创建学生表:学号,姓名,性别,生日

2、获取参数元数据个数及数据类型

/**
    目标:掌握参数元数据的作用和常用方法

    ParameterMetaData参数元数据的作用:用来获得占位符?的个数以及数据类型

    ParameterMetaData参数元数据常用方法:
         int getParameterCount() 获得占位符?的个数
         String getParameterTypeName(int index) 获得指定占位符的数据类型,索引从1开始(了解)

    如何获得ParameterMetaData参数元数据对象
        通过PreparedStatement对象的方法获得,方法如下:
            ParameterMetaData getParameterMetaData();

 */
public class JDBCDemo01 {
   
    public static void main(String[] args) throws Exception{
   
        // 需求:往学生表添加一条记录
        // 1. 获得连接对象
        Connection conn = DataSourceUtils.getConnection();
        // 2. 获得预编译对象
        PreparedStatement ps = conn.prepareStatement("insert into student values(null,?,?,?)");
        // 3. 给占位符赋值
        ps.setString(1, "jack");
        ps.setString(2, "男");
        ps.setString(3, "1999-02-20");
        // 4. 获得参数元数据对象
        ParameterMetaData pmd = ps.getParameterMetaData();
        // 调用参数元数据对象的方法获得占位符个数和类型
        int parameterCount = pmd.getParameterCount();
        System.out.println("parameterCount = " + parameterCount);
        for (int index = 1; index <= parameterCount; index++) {
   
            // 根据索引获得对应占位符的数据类型
            String typeName = pmd.getParameterTypeName(index);
            System.out.println(typeName);
        }
        // 5. 执行SQL语句
        System.out.println(ps.executeUpdate());
        // 6. 关闭资源
        DataSourceUtils.close(conn, ps);
    }
}

默认情况下:因为MySQL驱动的原因,不支持得到参数元数据的类型。
MySQL驱动对参数元数据的数据类型支持不理想,需要如下配置才能得到参数的MySQL数据类型,而且只能得到VARCHAR类型,如果不配置这个参数则会出现异常。

jdbc:mysql://localhost:3306/数据库名?generateSimpleParameterMetadata=true

小结

参数元数据的作用:用来获得占位符个数和类型(都是varchar类型)

如何获取参数元数据对象:通过PreparedStatement对象的方法获得,方法如下:

ParameterMetaDate getParameteMetaData()
ParameterMetaData对象常用方法 说明
int getParameterCount() 获得占位符个数
String getParameterTypeName(int param) 获得指定占位符的数据类型

三、结果集元数据–ResultSetMetaData

ResultsetMetaData可用于获取有关Resultset对象中列的数量,列名和列的类型。只有查询才会有结果集元素数据。
在这里插入图片描述

获取ResultSetMetaData对象

查询获得ResultSet后,通过 ResultSet 的 getMetaData() 方法来获取到 ResultSetMetaData 对象

//获得结果集元数据对象
ResultSetMetaData getMetaData()

ResultSetMetaData对象方法

返回此ResultSet对象中的列数

//获得列的数量
int getColumnCount() 

获取指定列的名称

//获得指定列的名称,索引从1开始
String getColumnName(int column) 

获取指定列的数据库特定类型名称

//获得指定列的类型,索引从1开始
String getColumnTypeName(int column) 

结果集元数据ResultSetMetaData代码示例1

// ResultSetMetaData 
public static void test02() throws SQLException {
   
    Connection conn = DataSourceUtils.getConnection();
    String sql = "SELECT * FROM student WHERE id=1";
    PreparedStatement stmt = conn.prepareStatement(sql);
    ResultSet rs = stmt.executeQuery();
    // 获取结果集元数据
    ResultSetMetaData md = rs.getMetaData();
    int num = md.getColumnCount();
    System.out.println("列数:" 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值