一、数据库元数据
元数据:是指数据库、表、列的定义信息。即用来定义数据表的数据
回顾元注解
元注解是用来定义注解的注解
元数据分类
数据库元数据:可以获得数据库的版本,驱动版本等信息(了解)
参数元数据:用来获得占位符?的个数以及数据类型,参数指的是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("列数:"