玩转MySQL ------使用java获取数据库的原信息

玩转数据库的元信息操作,主要是两个类:

1) DatabaseMetaData类: 包含驱动信息、数据库名、表名(视图、存储过程等)

通过con.getMetaData()可获得一个DatabaseMetaData类对象

2) ResultSetMetaData类: 包含表结构相关的信息,如:列(字段)的个数、名字、类型

和属性等信息

  通过rs.getMetaData()可获得一个ResultSetMetaData类对象

 

一、接下来进行DatabaseMetaData的操作演示:

1.获取MySQL等版本信息:

	@Test// DatabaseMetaData类的操作演示public void DBMetaDemo() throws Exception {Connection conn = Conn4Utils.getConn();//获取conn的工具类DatabaseMetaData dm = conn.getMetaData();System.out.println(dm.getDriverName());System.out.println(dm.getDriverVersion());System.out.println(dm.getDriverMajorVersion());System.out.println(dm.getDriverMinorVersion());System.out.println(dm.getMaxStatements());System.out.println(dm.getJDBCMajorVersion());System.out.println("---------1--------");}

结果:

2.获取数据库名:

// /如何获取数据库名ResultSet rs = dm.getCatalogs();while (rs.next()) {String name = rs.getString("TABLE_CAT");System.out.println(name);}

结果:

 

PS: 类型"TABLE"可从API文档中的getTableTypes()方法中查到,打开API,找到DatabaseMetaDate类:

找到方法getTables:

点开:

3.如何在已知数据库名的情况下,获取它当中的表名

使用getTables方法:

参数1和参数2都是数据库名,之所以要两个参数,是因为该函数要兼容不同的数据库,参数2可给正则的形式。参数3是表格

名,null为不用正则匹配,若取"%a%"代表只获取名字中包含"a"的表格(视图等),参数4是表格的类型如Table、View等

ResultSet rs3 = dm.getTables("abc", "abc", null,new String[] { "TABLE" });// 类型"TABLE"可从API文档中的getTableTypes()方法中查到while (rs3.next()) {String str = rs3.getString("TABLE_NAME"); // 字段名"TABLE_NAME"可从API文档中的getTables()方法中查到System.out.println(str);}

结果:

4.获取一个数据库中表信息

// 获取一个数据库中表信息---写死的---如果把数据库名和表名写成活的就可获取任意数据库与数据表Statement st = conn.createStatement();st.execute("use abc"); // execute()方法可以执行任意sql,包含: use aa, create// database, create table, alter...ResultSet rs2 = st.executeQuery(" select * from stud3");while (rs2.next()) {String str = rs2.getString(2);System.out.println(str);}

结果:

 

二、 ResultSetMetaData类的操作演示

1.跨库查询用"数据库名.表名",这部分可用DBMetadata把它做活

同样也是用ResultSet 的 rs.getMetaData()获取元数据,然后获取列,获取表的数据。

@Test// ResultSetMetaData类的操作演示public void RSMetaDemo() throws Exception {Connection conn = Conn4Utils.getConn();Statement st = conn.createStatement();String sql = "select * from abc.stud3"; // 跨库查询用"数据库名.表名",这部分可用DBMetadata把它做活ResultSet rs = st.executeQuery(sql);// ※※※ResultSetMetaData rsmd = rs.getMetaData();// 结果集元数据int columns = rsmd.getColumnCount(); // 字段数量/列数// ///输出表头for (int i = 1; i <=columns; i++) {String fieldName=rsmd.getColumnName(i);//jdbc中的列序号都是从1开始System.out.print(fieldName+"\t");      }System.out.println();System.out.println("--------------------------");while(rs.next()){//输出一行数据for(int i=0;i

结果:

 

 

 

 

 

 

 

 

 

 

 

 

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部