1.1. mysql数据库连接池使用(三)数据库元数据信息反射数据库获取数据库信息

有时候我们想要获取到数据库的基本信息,当前程序连接的那个数据库,数据库的版本信息,数据库中有哪些表,表中都有什么字段,字段都是什么类型。等等一些信息,我们称之为数据库的元数据信息。实际开发中hibernate等orm框架或者代码生成器都是通过元数据信息获取库、表的信息进行封装和操作。

元数据主要有三种:

 DatabaseMetaData元数据信息(获取数据库的信息)

 ResultSetMetaData 元数据信息(操作的表的元数据信息)

 ParameterMetaData元数据信息(参数的元数据信息)

本文下面的connection获取都是基于mysql数据库连接池使用(二)实现自己的数据库连接池实现的,不懂的可以参考,下面开始我们的学习之旅吧。

1.1.1. DatabaseMetaData元数据信息

获取数据库的元数据信息:

Connection con = JdbcUtils.getConnection(true);

// 数据库元数据信息

DatabaseMetaData dmd = con.getMetaData();

String version = dmd.getDatabaseProductVersion();

System.out.println("数据库版本" + version);

String name = dmd.getDatabaseProductName();

System.out.println("数据库名称 " + name);

String driverName = dmd.getDriverName();

System.out.println("驱动名称 " + driverName);

测试:

08:21:06.568 [main] DEBUG cn.xhgg.test.DataSourceManager - DefaultConnectionPoolName is 3000...

08:21:06.632 [main] DEBUG cn.xhgg.test.DataSourceManager - Init DataSource 3000...

08:21:06.633 [main] DEBUG cn.xhgg.test.DataSourceManager - Init DataSource 5000...

数据库版本5.6.24

数据库名称 MySQL

驱动名称 MySQL Connector Java

1.1.2. ResultSetMetaData 元数据信息

获取此 ResultSet 对象的列的编号、类型和属性。

主要是获取ResultSet中数据库表中的所以字段信息:

数据库表的定义如下图:

代码如下:

String sql = "select * from test1";

Connection con = JdbcUtils.getConnection(true);

PreparedStatement pst = con.prepareStatement(sql);

ResultSet rs = pst.executeQuery();

// 得到结果集元数据对象

ResultSetMetaData rmd = rs.getMetaData();

if (rs.next()) {

// 得到每条记录有几列

//操作的表一共有多少字段

int count = rmd.getColumnCount();

System.out.println(count);

for (int i = 0; i < count; i++) {

String name = rmd.getColumnName(i + 1); // 根据列号得到每一列的名称

String columnTypeName = rmd.getColumnTypeName(i + 1);

System.out.print(name + "    "+columnTypeName);

int type = rmd.getColumnType(i + 1);

System.out.println(type);

System.out.println("------------------------");

}

}

输出如下:

08:38:55.990 [main] DEBUG cn.xhgg.test.DataSourceManager - DefaultConnectionPoolName is 3000...

08:38:56.059 [main] DEBUG cn.xhgg.test.DataSourceManager - Init DataSource 3000...

08:38:56.060 [main] DEBUG cn.xhgg.test.DataSourceManager - Init DataSource 5000...

3

id    INT4

------------------------

name    VARCHAR12

------------------------

age    INT4

------------------------

1.1.3. ParameterMetaData元数据信息的获取

获取此 PreparedStatement 对象的参数的编号、类型和属性

ParameterMetaData主要可以获取到用户传入的参数的一些元数据信息如下:

代码如下:

String sql = "select * from test1 where name=?";

Connection con = JdbcUtils.getConnection(true);

PreparedStatement pst = con.prepareStatement(sql);

pst.setString(1, "1");

pst.executeQuery();

// 关于当前要操作的sql语句中的参数相关信息

ParameterMetaData pmd = pst.getParameterMetaData();

// 得要要执行的sql语句中有几个?

int count = pmd.getParameterCount();

System.out.println(count);

mysql数据库连接池使用(三)数据库元数据信息反射数据库获取数据库信息的更多相关文章

  1. Python实现Mysql数据库连接池

    python连接Mysql数据库: python编程中可以使用MySQLdb进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接mysql数据库请求时,都是独立的去请求访问,相当浪费资源,而且访 ...

  2. python3 实现mysql数据库连接池

    首先声明一下,这篇博客进行了通过自己的代码方式,加上这篇博客,最后总结出这段代码.参考博客连接:http://blog.csdn.net/zbc1090549839/article/details/5 ...

  3. 一个简单的MySql数据库连接池的实现

    package cn.hc.connectionPool; import java.io.IOException; import java.io.InputStream; import java.sq ...

  4. MySql数据库连接池专题

    MySql数据库连接池专题 - aspirant - 博客园https://www.cnblogs.com/aspirant/p/6747238.html

  5. 【Java/JDBC】利用ResultSetMetaData从数据库的某表中获取字段信息并存到csv文件

    代码下载:https://files.cnblogs.com/files/xiandedanteng/FindNotnullColumns20191102-2.rar 这篇还不够完善,请看更完善的续篇 ...

  6. 【数据库开发】如何创建MySQL数据库连接池(一个基于libmysql的MySQL数据库连接池示例(C/C++版))

      http://blog.csdn.net/horace20/article/details/8087557 1.  一般架构说明 图 1 架构层次图 一般应用系统数据库访问模块可大致分为两层,一层 ...

  7. MySql数据库连接池

    1.传统链接(如下为示意图) 注意: (1).传统方式找DriverManager要连接,数目是有限的. (2).传统方式的close(),并没有将Connection重用,只是切断应用程序和数据库的 ...

  8. mysql数据库连接池使用(一)dbcp方式的配置

    Apache的数据库连接池 DBCP的常用配置说明,因为项目中用到了需要对其封装,所以必须先了解怎么配置以及各个配置字段的含义,理解的基础上开发我们自己的数据库连接池.可以参考官网dbcp官网. db ...

  9. mysql数据库连接池 手动编写

    源码来源于http://www.toutiao.com/a6350448676050174209/,留存以供以后参考学习 先上一张项目托普图 然后分别列出各个文件的源码: MyPool.java(就是 ...

随机推荐

  1. 【AHOI2005】病毒检测

    题目描述 科学家们在Samuel星球上的探险仍在继续.非常幸运的,在Samuel星球的南极附近,探险机器人发现了一个巨大的冰湖!机器人在这个冰湖中搜集到了许多RNA片段运回了实验基地. 科学家们经过几 ...

  2. poj 3525 凸多边形多大内切圆

    Most Distant Point from the Sea Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 4758   ...

  3. 4999: This Problem Is Too Simple!

    Description 给您一颗树,每个节点有个初始值. 现在支持以下两种操作: C i x(0<=x<2^31) 表示将i节点的值改为x. Q i j x(0<=x<2^31 ...

  4. 如何让Mac、Windows可以互相远程

    您可以通过Mac来远程Windows桌面:也可通过Windows来远程Mac界面:甚至还可以通过iOS或Android来远程Mac或Windows. Windows的操作方法,以Windows XP ...

  5. final、finally与finalize的区别

    1. final  在java中,final可以用来修饰类,方法和变量(成员变量或局部变量).下面将对其详细介绍. 1.1 修饰类 当用final修饰类的时,表明该类不能被其他类所继承.当我们需要让一 ...

  6. Mybatis之一级缓存,二级缓存

    一级缓存:Mybatis的一级缓存在session上,只要通过session查过的数据,都会放在session上,下一次再查询相同id的数据,都直接冲缓存中取出来,而不用到数据库里去取了. 二级缓存: ...

  7. spring @Value 设置默认值

    @Value("${spring.value.test}") private String value; 如果配置文件中没有设置 spring.value.test 在启动的时候讲 ...

  8. mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法

    [CSDN下载] Powerdesigner 设计主键code不能重复等问题 [CSDN博客] Oracle中用一个序列给两个表创建主键自增功能的后果 [CSDN博客] MySQL自增主键删除后重复问 ...

  9. Web网页树形列表中实现选中父节点则子节点全选和不选中父则子全不选

                需要实现的功能:选中父节点对应子节点全选:不选中父节点,对应子节点也不选中 如下图所示,选中车队,对应车队中车辆也全部选中,以实现车队中所有车辆在地图上的显示. 选中cqupt ...

  10. DataOutputStream&DataInputStream

    DataOutputStream&DataInputStream是对输出输入流的扩展,可以直接读写int double等数据类型 下面是今天的练习,细节都写到注释里面了: package Zh ...