JDBC获取数据库各种信息

  

当通过一个JDBC连接上一个数据的时候,我们就可以通过JDBC获取到这个数据的各种信息,比如数据库的名称,模式,表结构(及其字段),视图,函数,过程,访问权限等等一系列的信息。当然,如果你原意,你还可以访问个个表中的数据(只要你有权限)。

  

笔者曾接触Sybase数据库,Sybase很垃圾,搞了老半天,连个表都看不见,更无从谈及访问数据,无奈之下通过JDBC连接上数据库后,将数据的各种信息一一输出。

  

时隔两年了,近日又在做一个项目的时候,发现很多人都用IDE从表生成的POJO,各个工具生成规则也有所不同,一是SQL到Java类型之间的映射策略不一致。而是生成POJO属性连个注释都没有,一大堆英文描述(实际上全是费屁,我仅仅要的是个字段的含义)。很低级吧,从表到POJO,一般来说都是从对象建模入手,快速分解问题,建立其领域模型(其中包含实体类之间联系),如有必要才过渡到数据库建模。当然这些都是不是鄙人所能控制的。

  

既然要大家都要做这一步工作,为了保持映射关系的一致性,可以定义下Java SQL类型到Java类型之间的一个映射关系,然后读取各个表名称,遍历其字段的名称,类型,注释等信息,并将表,字段的注释信息拿来作为POJO成员变量的注释信息,这就达到目的了,至于getter/setter方法,各个工具都生成的很好,就不用自己再浪费时间干哪些无聊的工作了。

  

下面以MySQL5为例,看看实现过程:

  

首先为了描述表和列的关系,必须做个简单建模:
表对象,列对象,之间是一对多关系。
公共类TableInfoBean {
私人字符串表;
私人字符串tableComment;
私人ListcolumnList=new ArrayList ();

  

公共类ColumnBean {
私人字符串columnName;
私人字符串columnComment;
私人字符串SqlType;

  

这个关系很简单,就这么搞定了,用来保存一个表信息。

  

下面就是如何从数据库读取表信息了。
在这里依赖一个类DatabaseMetaData,这个对象可以从数据库连接来获取。有了它万事大吉了,想知道什么问它即可:
DatabaseMetaData DatabaseMetaData=https://www.yisu.com/zixun/conn.getMetaData ();

  
 <代码>//获取所有表
  ResultSet tableSet=databaseMetaData。可以获得的(null,“%”、“%”,新String[]{“表”});//获取表表列信息
  ResultSet columnSet=databaseMetaData。getColumns (null,“%”,“%”);  
  

上面代码会得到两个结果集,对照DatabaseMetaData的文档,我们可以通过结果集的列名来获取想要的信息,例如

  
 <代码>字符串表=tableSet.getString (“TABLE_NAME”);
  字符串tableComment=tableSet.getString(“讲话”);
  
  字符串columnName=columnSet.getString (COLUMN_NAME);
  字符串columnComment=columnSet.getString(“讲话”);
  字符串sqlType=columnSet.getString (“DATA_TYPE”);  
  

含义很清楚我就不做解释了。

  

逐个遍历表,然后得到一个TableInfoBean的集合,这个集合就是数据库中所有表的信息了,有了这个信息,生成xml, POJO简直就是小儿科的事情了。

JDBC获取数据库各种信息