网站后台内容管理百度收录查询api
在使用Hibernate时,我们都用到了反向工程技术,即可根据一个已经存在的表,自动的生成Class类及映射文件,那么java是怎么知道数据库的表的结构的呢? 这就是DataBase MetaData所起的作用.
第一个概念“元数据”: 即数据的数据.
我们来看一个案例:
1. 新建一个数据库:
create database metadatatest;
use metadatatest;
create table student(
id int primary key auto_increment,
name varchar(50) not null
)
select * from student;
2. 创建一个java程序来读取这个表的信息:
public static void main(String[] args)throws Exception {
Connection con=null;
DatabaseMetaData m=null;
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/metadatatest","root","a");
//获取数据库元信息
m=con.getMetaData();
//取得数据库信息
ResultSet rs=m.getTables(null, null,null, new String[]{"TABLE"});
//循环输出数据库信息
while(rs.next()){
System.out.println("数据库名:"+rs.getString("TABLE_CAT"));
System.out.println("模式:"+rs.getString("TABLE_SCHEM"));
System.out.println("表的名字:"+rs.getString("TABLE_NAME"));
System.out.println("类型:"+rs.getString("TABLE_TYPE"));
System.out.println("注释:"+rs.getString("REMARKS"));
}
System.out.println("************************************");
//取出student表中的字段信息
rs=m.getColumns(null, null, "student", null);
while(rs.next()){
System.out.print("列名:"+rs.getString("COLUMN_NAME")+"/t");
System.out.print("列数据类型:"+rs.getString("DATA_TYPE")+"/t");
System.out.print("列数据长度:"+rs.getString("COLUMN_SIZE")+"/t");
System.out.print("列默认值:"+rs.getString("COLUMN_DEF")+"/t");
System.out.println();
}
rs.close();
con.close();
}