Java数据库元数据的应用
1、元数据(MetaData)是什么?
定义数据结构的数据。
也就是说数据库元数据是用来定义数据库各类对象的数据,如数据库中:数据库名(DataBaseName)、表明(TableName)、列名(CloumnName),还有一些数据库的基本信息:当前连接的用户名、版本名,甚至通过sql语句返回结果集中大部分字符串也是元数据。
2、如何获取数据库元数据?
// 数据库连接配置
String driver="com.mysql.cj.jdbc.Driver"; //mysql8.0.20驱动
String url="jdbc:mysql://localhost:3306?“
+”useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";
String username="root";
String password="123456";
Class.forName(driver); // 注册驱动
Properties props = new Properties();
props.setProperty("remarksReporting","true");//获取数据库的备注信息,如果不加此项不能获取备注
props.setProperty("user",username);
props.setProperty("password",password);
//==============================================================================
// 1.获取连接
this.conn = DriverManager.getConnection(url,props);
// 2.获取元数据
DatabaseMetaData metaData = this.conn.getMetaData();
3、能从数据库元数据拿到什么?
/**
* 获取数据库基本信息(常用方法)
*/
// 获取数据库版本名(Mysql)
System.out.println(metaData.getDatabaseProductName());
// 获取数据库用户名(用户名@Ip)
System.out.println(metaData.getUserName());
// 查看数据库是否支持事务
System.out.println(metaData.supportsTransactions());
// 获取数据库连接信息(上面的代码中的url)
System.out.println(metaData.getURL());
// 获取数据库驱动名(MySQL Connector/J)
System.out.println(metaData.getDriverName());
// 查看数据库是否只支持读操作
System.out.println(metaData.isReadOnly());
/**
* 获取数据库:表、列 的信息
* 返回值类型 ResultSet
*/
// 获取数据库集合
ResultSet rs = metaData.getCatalogs();
while (rs.next()){
// 输出数据库名
System.out.println(rs.getString("TABLE_CAT"));
}
// 获取数据库表集合
// 注:第一个参数为数据库名一般需要指定,否则会输出最后一个参数types匹配的全部数据库表信息
// 这里暂且指定为null,根据需要进行填充数据库名
ResultSet rs = metaData.getTables(null,null,null,new String[]{"TABLE"});
while (rs.next()){
// 输出表名
System.out.println(rs.getString("TABLE_NAME"));
}
// 获取数据库列集合
// 同理,这里的数据库名需要指定,否则返回数据库中全部的列名集合
ResultSet rs = metaData.getColumns("dataBaseName",null,"bs_user",null);
while (rs.next()){
System.out.println(rs.getString("COLUMN_NAME"));
}
//获取数据库的主键集合
ResultSet primaryKeys = metaData.getPrimaryKeys(null, null, "tableName");
while (primaryKeys .next()){
System.out.println(primaryKeys .getString("COLUMN_NAME"));
}
- 方法参数概述
- catalog 数据库目录名称的 String。对此参数提供 Null 值表示无需使用目录名称。
- schemaPattern 数据库架构名称模式的 String 值。对此参数提供 Null 值表示无需使用架构名称。
- tableNamePattern 数据库表名称模式的 String。
- types 含有要包含的表类型的字符串数组。Null 表示应包含所有表类型。典型的类型有"TABLE",“VIEW”, “SYSTEM TABLE”, “GLOBAL TEMPORARY”,“LOCAL TEMPORARY”, “ALIAS”, “SYNONYM”
- 结果集中的列可以通过断点调试查看,也可以通过结果集元数据查看
// 承接上述代码中 ResultSet rs = 。。。
ResultSetMetaData rsmd = rs.getMetaData();
// 特别注意索引从 1 开始 !!
for (int i=1; i<=cols ;i++){
// 输出结果集元数据列名
System.out.println(rsmd.getColumnName(i));
}
4、总结
本节最重要的是理解了元数据的含义:它描述的是数据的数据结构信息。从数据库元数据开始,记录它的基本使用与常见用法,我们可以轻松获取到数据库的基本信息。但进一步研究发现,数据库元数据返回的数据库信息往往存在于一个结果集(ResultSet)中,我们在初步了解它的时候都是通过断点调试来查看其内部信息,那么有没有更直观的方法来查看结果集(ResultSet)中的数据信息呢?答案是肯定的,接下来我们就将论述结果集元数据(ResultSetMetaData)。