DatabaseMetaData类的getTable()、getColumns()方法使用,以及参数的传递问题,针对oracle、mysql、postgres三种数据库进行举例

DatabaseMetaData类

    • DatabaseMetaData实例的获取
      • 获取数据库属性的方法
      • getTable()方法
      • getColumns()方法
      • 关于参数一参数二传参问题

DatabaseMetaData类是java.sql包中的类,利用它可以获取我们连接到的数据库的结构、存储等很多信息。如:
1、数据库与用户,数据库标识符以及函数与存储过程。
2、数据库限制。
3、数据库支持不支持的功能。
4、架构、编目、表、列和视图等。
通过调用DatabaseMetaData的各种方法,程序可以动态的了解一个数据库。

DatabaseMetaData实例的获取

 		Connection conn = DriverManager.getConnection(url,username,password);
        DatabaseMetaData dbmd = Conn.getMetaData();

获取数据库属性的方法

			//获取数据库名称
            dbmd.getDatabaseProductName();

            //获取数据库版本
            dbmd.getDatabaseProductVersion();

            //获取数据库驱动
            dbmd.getDriverName();

            //获取驱动的版本
            dbmd.getDriverVersion();

            //数据库用户名
            dbmd.getUserName();

getTable()方法

获取数据库表的结构,可以获取具体某一个表,或者模糊获取多个数据库表
参数的解释

/**
* catalog: 要获得表所在的编目
* schemaPattern:要获得表所在的模式
* tableNamePattern:数据表的表达式
* types[]:数据表的类型  可能的类型为"TABLE"、"VIEW"、"SYSTEM TABLE"、
* 			"GLOBAL TEMPORARY","LOCAL  TEMPORARY","ALIAS","SYSNONYM"
*/
ResultSet getTables(String catalog, String schemaPattern,
								String tableNamePattern, String types[])

下面展示三种数据库的连接参数的配置

  1. PostgreSql数据库
/**
* 	conn.getCatalog()		所连接的数据库的名称
* 	public					固定使用public
* 	tableName				数据表名称,也可以使用“test_%”表示查出以test开头的所有数据表
* 	查出的数据库表的类型		使用TABLE
*/
ResultSet rs = dbmd.getTables( conn.getCatalog() , "public", "tableName", new String[]{"TABLE"});
  1. Oracle数据库
/**
* null								不需要填
* conn.getMetaData().getUserName()	用户名,也就是orcale数据库的用户名
* tableName							数据表名称,也可以使用“test_%”表示查出以test开头的所有数据表
*查出的数据库表的类型				使用TABLE也可以是null
*/
ResultSet rs = dbmd.getTables(null, conn.getMetaData().getUserName(), "table", null);
  1. MySql数据库
/**
* null						不需要填
* conn.getCatalog()			获取所连接的数据库的名称
* tableName					数据表名称,也可以使用“test_%”表示查出以test开头的所有数据表
*查出的数据库表的类型		使用TABLE也可以是null
*/
ResultSet rs = dbmd.getTables(null, conn.getCatalog(), "student", new String[]{"table"});

getColumns()方法

获取数据库具体某个表的结构。
参数的解释

/**
* catalog: 要获得表所在的编目
* schemaPattern:要获得表所在的模式
* tableNamePattern:数据表名称
*columnNamePattern:数据列表达式
*/
ResultSet getColumns(String catalog, String schemaPattern,
						String tableNamePattern, String columnNamePattern)
  1. Oracle数据库
/**
* null						            不需要填
* conn.getMetaData().getUserName()		数据库用户名
* tableName				            数据表名称
*表列字符串表达式                          null表示查询所有列
*/
ResultSet rs = dbmd.getColumns(null, conn.getMetaData().getUserName(), "tableName", null);
  1. MySql数据库
/**
* null						不需要填
* conn.getCatalog()		获取所连接的数据库的名称
* tableName				数据表名称
*表列字符串表达式             null表示查询所有列
*/
ResultSet rs = dbmd.getColumns(null,conn.getCatalog(),"tableName",null);
  1. PostgreSql数据库
/**
* conn.getCatalog()	    数据库名
* public		        固定public
* tableName				数据表名称
*表列字符串表达式        null表示查询所有列
*/
ResultSet rs = dbmd.getColumns(conn.getCatalog(), "public", "tableName", null);

关于参数一参数二传参问题

  1. MySQL

我们想要查找的就是test下面的表,它的上一级就是test数据库名称,所以第一个参数catalog默认为空,第二个参数schemaPattern就为数据库名称。

DatabaseMetaData类的getTable()、getColumns()方法使用,以及参数的传递问题,针对oracle、mysql、postgres三种数据库进行举例_第1张图片

  1. Oracle

而oracle不同的一点就是,ANONYMOUS这其实是他的用户名,所以第一个参数catalog默认为空,第二个参数schemaPattern就为数据库用户名。

DatabaseMetaData类的getTable()、getColumns()方法使用,以及参数的传递问题,针对oracle、mysql、postgres三种数据库进行举例_第2张图片

  1. PostgreSql

而postgresql两个参数都填了是因为想要查询到表,上面还有2级目录,所以第一个参数catalog为一级目录,则就是所连接数据库的名称,第二个schemaPattern就为二级目录public。
DatabaseMetaData类的getTable()、getColumns()方法使用,以及参数的传递问题,针对oracle、mysql、postgres三种数据库进行举例_第3张图片

你可能感兴趣的:(mysql,java,sql,oracle,数据库)