mysql数据库连接池使用(三)数据库元数据信息反射数据库获取数据库信息
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数据库连接池使用(三)数据库元数据信息反射数据库获取数据库信息的更多相关文章
- Python实现Mysql数据库连接池
python连接Mysql数据库: python编程中可以使用MySQLdb进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接mysql数据库请求时,都是独立的去请求访问,相当浪费资源,而且访 ...
- python3 实现mysql数据库连接池
首先声明一下,这篇博客进行了通过自己的代码方式,加上这篇博客,最后总结出这段代码.参考博客连接:http://blog.csdn.net/zbc1090549839/article/details/5 ...
- 一个简单的MySql数据库连接池的实现
package cn.hc.connectionPool; import java.io.IOException; import java.io.InputStream; import java.sq ...
- MySql数据库连接池专题
MySql数据库连接池专题 - aspirant - 博客园https://www.cnblogs.com/aspirant/p/6747238.html
- 【Java/JDBC】利用ResultSetMetaData从数据库的某表中获取字段信息并存到csv文件
代码下载:https://files.cnblogs.com/files/xiandedanteng/FindNotnullColumns20191102-2.rar 这篇还不够完善,请看更完善的续篇 ...
- 【数据库开发】如何创建MySQL数据库连接池(一个基于libmysql的MySQL数据库连接池示例(C/C++版))
http://blog.csdn.net/horace20/article/details/8087557 1. 一般架构说明 图 1 架构层次图 一般应用系统数据库访问模块可大致分为两层,一层 ...
- MySql数据库连接池
1.传统链接(如下为示意图) 注意: (1).传统方式找DriverManager要连接,数目是有限的. (2).传统方式的close(),并没有将Connection重用,只是切断应用程序和数据库的 ...
- mysql数据库连接池使用(一)dbcp方式的配置
Apache的数据库连接池 DBCP的常用配置说明,因为项目中用到了需要对其封装,所以必须先了解怎么配置以及各个配置字段的含义,理解的基础上开发我们自己的数据库连接池.可以参考官网dbcp官网. db ...
- mysql数据库连接池 手动编写
源码来源于http://www.toutiao.com/a6350448676050174209/,留存以供以后参考学习 先上一张项目托普图 然后分别列出各个文件的源码: MyPool.java(就是 ...
随机推荐
- 【luoguP4006 清华集训2017】小Y和二叉树
题目描述 小 Y 是一个心灵手巧的 OIer,她有许多二叉树模型. 小 Y 的二叉树模型中,每个结点都具有一个编号,小 Y 把她最喜欢的一个二叉树模型挂在了墙上,树根在最上面,左右子树分别在树根的左下 ...
- poj3237 树链部分 边权模板
Tree Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 7384 Accepted: 2001 Description ...
- C# winform中自定义精确定时器(经测试稳定可靠)
原C#的定时器时间越长,误差越大. 在主动请求设备数据的使用,使用C#的几种自带定时器导致每天都会丢失几条数据. 经测试使用自定义的定时器可完全解决此问题. 使用方法: MillisecondTime ...
- c++读写MySQL
看过很多C或是C++操作MySQL数据库的文章,大部分太吃力了,甚至有一部分根本没有很好的组织文字,初学者比较难以接受,即使是C++或是C高手也是比较难看懂.写这篇文章的目的不是别的,就一个,告诉您用 ...
- C语言程序设计 第一次作业
(一)实验总结 1.求圆面积和周长 (1)题目 输入圆的半径,计算圆的周长和面积. (2)流程图 (3)测试数据及运行结果 (4)实验分析问题一:输出时往输出框输不上.原因 :没有加双引号.2.判断闰 ...
- chrome 如何卸载干净
安装位置C:\Users\你电脑的用户名\AppData\Local\Google,删除整个文件夹,用CCleaner扫描注册表删除无用注册表项,重启安装即可.
- Redis出现多线程调用时抛出 [B cannot be cast to java.lang.Long] 异常
原因分析: 多个线程同时调用了同一个jedis对象,导致内存数据被多个线程竞争,产生数据混乱 (或者大家都用通一个redis获取同一个实例,登录同一个账号使用缓存时报错) 解决方案:每个线程都new出 ...
- Django笔记--视图
URLconf 在settings.py文件中通过ROOT_URLCONF指定根级url的配置 urlpatterns是一个url()实例的列表 一个url()对象包括: 正则表达式 视图函数 名称n ...
- POJ 放苹果问题(递归)
首先我们想象有一个函数count f(m,n)可以把m个苹果放到n个盘子中. 根据 n 和 m 的关系可以进一步分析: 特殊的m <=1|| n <= 1时只有一种方法: 当 m < ...
- Docker容器访问控制
容器的访问控制,主要通过 Linux 上的 iptables 防火墙来进行管理和实现.iptables 是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 容器要想访问外部 ...