博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDBC获取数据库各种信息
阅读量:6640 次
发布时间:2019-06-25

本文共 1757 字,大约阅读时间需要 5 分钟。

当通过一个JDBC连接上一个数据的时候,我们就可以通过JDBC获取到这个数据的各种信息,比如数据库的名称、模式、表结构(及其字段)、视图、函数、过程、访问权限等等一系列的信息。当然,如果你原意,你还可以访问个个表中的数据(只要你有权限)。
 
笔者曾接触Sybase数据库,Sybase很垃圾,搞了老半天,连个表都看不见,更无从谈及访问数据,无奈之下通过JDBC连接上数据库后,将数据的各种信息一一输出。
 
时隔两年了,近日又在做一个项目的时候,发现很多人都用IDE从表生成POJO,各个工具生成规则也有所不同,一是SQL到Java类型之间的映射策略不一致。而是生成POJO属性连个注释都没有,一大堆英文描述(实际上全是费屁,我仅仅要的是个字段的含义)。很低级吧,从表到POJO,一般来说都是从对象建模入手,快速分解问题,建立其领域模型(其中包含实体类之间联系),如有必要才过渡到数据库建模。当然这些都是不是鄙人所能控制的。
 
既然要大家都要做这一步工作,为了保持映射关系的一致性,可以定义下Java SQL Type到Java Type之间的一个映射关系,然后读取各个表名称、遍历其字段的名称、类型、注释等信息,并将表、字段的注释信息拿来作为POJO成员变量的注释信息,这就达到目的了,至于getter/setter方法,各个工具都生成的很好,就不用自己再浪费时间干哪些无聊的工作了。
 
下面以MySQL5为例,看看实现过程:
 
首先为了描述表和列的关系,必须做个简单建模:
表对象、列对象,之间是一对多关系。
public 
class TableInfoBean { 

    
private String tableName; 

    
private String tableComment; 

    
private List<ColumnBean> columnList=
new ArrayList<ColumnBean>();
 
public 
class ColumnBean { 

    
private String columnName; 

    
private String columnComment; 

    
private String SqlType;
 
这个关系很简单,就这么搞定了,用来保存一个表信息。
 
下面就是如何从数据库读取表信息了。
在这里依赖一个类DatabaseMetaData,这个对象可以从数据库连接来获取。有了它万事大吉了,想知道什么问它即可:
DatabaseMetaData databaseMetaData = conn.getMetaData();
 
        //获取所有表
        ResultSet tableSet = databaseMetaData.getTables(null, "%", "%", new String[]{"TABLE"});
        //获取tableName表列信息
        ResultSet columnSet = databaseMetaData.getColumns(null, "%", tableName, "%");
上面代码会得到两个结果集,对照DatabaseMetaData 的文档,我们可以通过结果集的列名来获取想要的信息,例如
 
    String tableName = tableSet.getString("TABLE_NAME");
    String tableComment = tableSet.getString("REMARKS");
 
    String columnName = columnSet.getString("COLUMN_NAME");
    String columnComment = columnSet.getString("REMARKS");
    String sqlType = columnSet.getString("DATA_TYPE");
 
含义很清楚我就不做解释了。
 
逐个遍历表,然后得到一个TableInfoBean的集合,这个集合就是数据库中所有表的信息了,有了这个信息,生成xml、POJO简直就是小儿科的事情了。
 
本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/90739,如需转载请自行联系原作者
你可能感兴趣的文章
Valid Number leetcode java
查看>>
HBase ElasticSearch
查看>>
在html中写python代码的语法和特点-----基于webpy的httpserver
查看>>
IOS框架概览
查看>>
aehyok.com的成长之路二——技术选型
查看>>
linux中mail函数不能发送邮件怎么办
查看>>
Eclipse中设置中文件javadoc
查看>>
Intellij IDEA创建Maven Web项目
查看>>
武汉大学2014年基础数学面试全过程
查看>>
新手向 过神指南(希望能切实的帮助到新手朋友们)完整版
查看>>
x86汇编指令具体解释
查看>>
二级指针也引用
查看>>
汉诺塔
查看>>
linux sed命令详解
查看>>
八大排序算法
查看>>
XMPP协议的原理介绍
查看>>
c++多态的案例分析
查看>>
Touch ID和Passcode框架,Apple Watch风格的应用布局
查看>>
Stage3D学习笔记(七):动态纹理
查看>>
Codeforces Round #281 (Div. 2) A. Vasya and Football 暴力水题
查看>>