玩转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<columns;i++){
				String str = rs.getString(i+1);
				System.out.print(str+"\t");
			}
			System.out.println();
		}
	}

结果:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值