当通过一个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 columnList=new ArrayList();

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简直就是小儿科的事情了。

jdbc mysql查询整行信息_JDBC获取数据库各种信息相关推荐

  1. jdbc获取mysql 列信息_JDBC获取数据库信息:获取表中各列的信息

    ResultSet getColumns(String catalog,String schemaPattern,String tableNamePattern,String columNamePat ...

  2. 查询Master下的系统表和系统视图获取数据库的信息和简单的渗透测试

    在SQL中可以通过查询Master下的系统表(sys)和系统视图(information_schema)获取数据库的信息.SQL2000和SQL2005的结构略有不同. 系统表结构参考系统表详细说明. ...

  3. 使用mysql查询显示行号

    使用mysql查询显示行号,没有像oracle这么方便. 不过也可以通过设定变量显示行号,例如: SELECT @rowno:=@rowno+1 as rowno,r.* from t_article ...

  4. MySQL查询显示行号

    使用mysql查询显示行号: Oracle中有专门的rownum()显示行号的函数,而MySQL没有专门的显示行号函数,但可以通过用@rownum自定义变量显示行号. 主要代码: (@rownum : ...

  5. MySQL查询时记录行号rownum MySQL查询显示行号MySQL查询显示行号MySQL流水号自MySQL自增行号

    MySQL查询时记录行号rownum MySQL查询显示行号MySQL查询显示行号MySQL流水号自MySQL自增行号 一.前言 Oracle中有rownum,实现查询的时候记录行号,MySQL中没有 ...

  6. 一键获取数据库整体信息脚本

    一键获取数据库整体信息脚本 将脚本内容放spooldb.sql中,在sqlplus中执行,相关信息会自动生成5个文件,其中addm是最近一小时文件,ash是最近半小时文件,而awr文件是最近一小时和最 ...

  7. sql 获取数据库字段信息_使用DBATools获取SQL数据库详细信息

    sql 获取数据库字段信息 In the series of articles on DBATools, (see TOC at the bottom) we are exploring useful ...

  8. mysql查询本用户的表的列名等信息_mysql常用命令查询手册

    启动MySQL服务 $ sudo service mysql start 或者 /etc/init.d/mysql start 使用root用户登陆 $ mysql -u 用户名 -p 密码 查看命令 ...

  9. mysql group by 行数_mysql获取group by的总记录行数另类方法

    mysql获取group by内部可以获取到某字段的记录分组统计总数,而无法统计出分组的记录数. mysql的SQL_CALC_FOUND_ROWS 使用 获取查询的行数 在很多分页的程序中都这样写: ...

最新文章

  1. Java中创建String的两种方式差异
  2. nginx 负载 sessionid 不一致_你不知道的Nginx负载均衡算法,快进来迅速掌握
  3. 记一次内存溢出的分析经历
  4. 分享一个牛逼的 Java 开源后台管理系统,不要造轮子了!
  5. centos6.5下的mysql5.6.30安装
  6. [USACO07FEB]银牛派对Silver Cow Party
  7. 个性化推荐从入门到精通(附推荐产品经理修炼秘籍)
  8. python所有软件-Python和pip,列出可用的软件包的所有版本?
  9. pycharm安装后,找不到Python解释器怎么办
  10. scala练习100道解析
  11. ansys通过扫掠(sweep)方法划分网格的方法
  12. 微信用户扫码登录和登录退出的业务逻辑实现(java版)
  13. Google reCaptcha验证码无法显示解决方案
  14. 小区物业专属公众号管理办法
  15. 安卓GB28181跨网段语音对讲
  16. android 应用更新安装时出现《 文件包与具有同一名称的现有文件包冲突》小记录
  17. 【记录】前端知识点 - Vue
  18. 从零到一搭建基础架构(2)-如何构建基础架构模块划分
  19. LUR 算法 原理(附带自己实现源码)
  20. 非视线成像:角膜成像系统

热门文章

  1. python秩和检验(Kruskal-Wallis H Test)
  2. PCA、碎石图、PCA+正确的维度个数、增量PCA(IncrementalPCA)、随机PCA(Randomized PCA)、KernelPCA
  3. php js混淆加密工具,求混淆js加密算法解密
  4. Linux下安装Oracle参数自动初始化脚本
  5. 项目快速开发的几点感悟
  6. 转录组测序技术和结果解读(二)——文库构建和测序策略
  7. java字典序列化_Java对象序列化,Serialize Java Data Object,音标,读音,翻译,英文例句,英语词典...
  8. JAVA数组编程教程_Java语言编程基础:数组
  9. 原生ajax XMLHTTPRequest()
  10. python 调用函数内部参数