DatabaseMetaData类是java.sql包中的类,利用它可以获取我们连接到的数据库的结构、存储等很多信息。如:
1、数据库与用户,数据库标识符以及函数与存储过程。
2、数据库限制。
3、数据库支持不支持的功能。
4、架构、编目、表、列和视图等。
通过调用DatabaseMetaData的各种方法,程序可以动态的了解一个数据库。
Connection conn = DriverManager.getConnection(url,username,password);
DatabaseMetaData dbmd = Conn.getMetaData();
//获取数据库名称
dbmd.getDatabaseProductName();
//获取数据库版本
dbmd.getDatabaseProductVersion();
//获取数据库驱动
dbmd.getDriverName();
//获取驱动的版本
dbmd.getDriverVersion();
//数据库用户名
dbmd.getUserName();
获取数据库表的结构,可以获取具体某一个表,或者模糊获取多个数据库表
参数的解释
/**
* catalog: 要获得表所在的编目
* schemaPattern:要获得表所在的模式
* tableNamePattern:数据表的表达式
* types[]:数据表的类型 可能的类型为"TABLE"、"VIEW"、"SYSTEM TABLE"、
* "GLOBAL TEMPORARY","LOCAL TEMPORARY","ALIAS","SYSNONYM"
*/
ResultSet getTables(String catalog, String schemaPattern,
String tableNamePattern, String types[])
下面展示三种数据库的连接参数的配置
/**
* conn.getCatalog() 所连接的数据库的名称
* public 固定使用public
* tableName 数据表名称,也可以使用“test_%”表示查出以test开头的所有数据表
* 查出的数据库表的类型 使用TABLE
*/
ResultSet rs = dbmd.getTables( conn.getCatalog() , "public", "tableName", new String[]{"TABLE"});
/**
* null 不需要填
* conn.getMetaData().getUserName() 用户名,也就是orcale数据库的用户名
* tableName 数据表名称,也可以使用“test_%”表示查出以test开头的所有数据表
*查出的数据库表的类型 使用TABLE也可以是null
*/
ResultSet rs = dbmd.getTables(null, conn.getMetaData().getUserName(), "table", null);
/**
* null 不需要填
* conn.getCatalog() 获取所连接的数据库的名称
* tableName 数据表名称,也可以使用“test_%”表示查出以test开头的所有数据表
*查出的数据库表的类型 使用TABLE也可以是null
*/
ResultSet rs = dbmd.getTables(null, conn.getCatalog(), "student", new String[]{"table"});
获取数据库具体某个表的结构。
参数的解释
/**
* catalog: 要获得表所在的编目
* schemaPattern:要获得表所在的模式
* tableNamePattern:数据表名称
*columnNamePattern:数据列表达式
*/
ResultSet getColumns(String catalog, String schemaPattern,
String tableNamePattern, String columnNamePattern)
/**
* null 不需要填
* conn.getMetaData().getUserName() 数据库用户名
* tableName 数据表名称
*表列字符串表达式 null表示查询所有列
*/
ResultSet rs = dbmd.getColumns(null, conn.getMetaData().getUserName(), "tableName", null);
/**
* null 不需要填
* conn.getCatalog() 获取所连接的数据库的名称
* tableName 数据表名称
*表列字符串表达式 null表示查询所有列
*/
ResultSet rs = dbmd.getColumns(null,conn.getCatalog(),"tableName",null);
/**
* conn.getCatalog() 数据库名
* public 固定public
* tableName 数据表名称
*表列字符串表达式 null表示查询所有列
*/
ResultSet rs = dbmd.getColumns(conn.getCatalog(), "public", "tableName", null);
我们想要查找的就是test下面的表,它的上一级就是test数据库名称,所以第一个参数catalog默认为空,第二个参数schemaPattern就为数据库名称。
而oracle不同的一点就是,ANONYMOUS这其实是他的用户名,所以第一个参数catalog默认为空,第二个参数schemaPattern就为数据库用户名。
而postgresql两个参数都填了是因为想要查询到表,上面还有2级目录,所以第一个参数catalog为一级目录,则就是所连接数据库的名称,第二个schemaPattern就为二级目录public。