MetaData元数据
一、基础
定义:数据库、表、列相关信息的描述。
何时使用:想取得对数据库的信息时使用。
一】数据库元数据——通过DataBaseMetaData
DataBaseMetaData dbmd = conn.getDataBaseMetaData();
code:
Connection conn = C3P0Utils.getMySqlConnection();
//取得数据库元数据 ———— DatabaseMetaData
DatabaseMetaData dbmd = conn.getMetaData();
String driver = dbmd.getDriverName();
System.out.println("driverName : " + driver);//MySQL-AB JDBC Driver
String url = dbmd.getURL();
System.out.println("url : " + url);//jdbc:mysql://127.0.0.1:3306/jdbc
int level = dbmd.getDefaultTransactionIsolation();//得到事务级别,值所对应的级别可有Connectin类的字段值来查看
System.out.println("level : " + level);//
String productName = dbmd.getDatabaseProductName();
System.out.println("productName : " + productName);//MySQL
二】参数元数据——通过ParameterMetaData
ParameterMetaData pmd = pstmt.getParameterMetaData;
code:
Connection conn = C3P0Utils.getMySqlConnection();
PreparedStatement pstmt = conn.prepareStatement(SqlMapping.QUERY_INF);//SELECT * FROM jdbc.test_batch WHERE id = ?
//得到参数元数据
ParameterMetaData pmd = pstmt.getParameterMetaData();
int cnt = pmd.getParameterCount();
System.out.println("共有" + cnt + "个参数");//公有的参数,即为SQL语句中的 ? 的个数,这里为1个
三】结果集数据元——通过ResultSetMetaData
ResultSetMetaData rsmd = rs.getMetaData();
code:
String SQL = " SELECT * FROM jdbc.test_batch ";
Connection conn = C3P0Utils.getMySqlConnection();
PreparedStatement pstmt = conn.prepareStatement(SQL);
ResultSet rs = pstmt.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int cnt = rsmd.getColumnCount();// 结果集的个数
for (int i = 1; i <= cnt; i++) {
String colName = rsmd.getColumnName(i);//取得每列的名字
System.out.println("colName = " + colName);//colName = id colName = name colName = age
}
总结:
核心规律如下:
ResultSetMetaData ResultSet.getMetaData();
ParameterMetaData psmt.getMetaData();
DataBaseMetaData conn.getMetaData();
二、使用MetaData元数据优化CUD操作和R操作(封装成工具方便使用)
一】CUD操作
code:
// CUD操作
public static int update(String sql, Object[] params) throws SQLException {
Connection conn = C3P0Utils.getMySqlConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);// INSERT INTO meta.user(username,salary) VALUES(?, ?)
// 取得参数元数据
ParameterMetaData pmd = pstmt.getParameterMetaData();
// 取得参数个数
int size = pmd.getParameterCount();
// 循环绑定对象的值
for (int i = 0; i < size; i++) {
pstmt.setObject(i + 1, params[i]);
}
int rows = pstmt.executeUpdate();
C3P0Utils.close(conn);
return rows;
}
二】R操作
code:
//R操作(要求:javaBean的名称必须要和数据库字段的名称相同)
public static <T> List<T> query(String sql, Object[] params, Class clazz) throws SQLException, InstantiationException, IllegalAccessException, InvocationTargetException {
Connection conn = C3P0Utils.getMySqlConnection();
List<T> list = new ArrayList<T>(); PreparedStatement pstmt = conn.prepareStatement(sql);//SELECT * FROM meta.user WHERE id = ?
ParameterMetaData pmd = pstmt.getParameterMetaData();
int cnt = pmd.getParameterCount();
for(int i = 0; i < cnt; i++) {
pstmt.setObject(i+1, params[i]);
}
ResultSet rs = pstmt.executeQuery(); while (rs.next()) {
ResultSetMetaData rsmd = rs.getMetaData();
int column = rsmd.getColumnCount();
T t = (T) clazz.newInstance();
for (int i = 0; i < column; i++) {
String colName = rsmd.getColumnName(i+1);
BeanUtils.setProperty(t, colName, rs.getObject(colName));
}
list.add(t);
}
C3P0Utils.closeAll(conn, pstmt, rs);
return list;
}
MetaData元数据的更多相关文章
- Angular2中的metadata(元数据)
@Attrubute() 从host element 中获得普通(不是@Input)属性对应的值 适用于组件嵌套或指令, 从父组件向子组件传递数据 app.component.ts import {C ...
- .NET/ASP.NETMVC Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(一)
.NET/ASP.NETMVC Model元数据.HtmlHelper.自定义模板.模板的装饰者模式(一) 阅读目录: 1.开篇介绍 2.Model与View的使用关系(数据上下文DataContex ...
- SQLSERVER中的元数据锁
SQLSERVER中的元数据锁 网上对于元数据锁的资料真的非常少 元数据锁一般会出现在DDL语句里 下面列出数据库引擎可以锁定的资源 资源 说明 RID 用于锁定堆(heap)中的某一行 KEY 用于 ...
- Salesforce和SAP Netweaver里数据库表的元数据设计
从Salesforce官网可以了解到Salesforce的force.com平台里数据库表的设计:https://developer.salesforce.com/page/Multi_Tenant_ ...
- Java注解-元数据、注解分类、内置注解和自定义注解|乐字节
大家好,我是乐字节的小乐,上次说过了Java多态的6大特性|乐字节,接下来我们来看看Java编程里的注解. Java注解有以下几个知识点: 元数据 注解的分类 内置注解 自定义注解 注解处理器 Ser ...
- Angular2学习笔记(1)
Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...
- Hadoop HA高可用性架构和演进分析(转)
1.概况 截至目前,Apache Hadoop版本分为两代,我们将第一代Hadoop称为Hadoop 1.0,第二代Hadoop称为Hadoop 2.0.前者主要有如下几种实现方式:1)社区版本基于S ...
- sql server 锁
锁模式 锁模式 说明 共享 (S) 用于不更改或不更新数据的读取操作,如 SELECT 语句. 更新 (U) 用于可更新的资源中. 防止当多个会话在读取.锁定以及随后可能进行的资源更新时发生常见形式 ...
- 常用命令[Linux]
Linux文件类型 -:普通文件(f) d:目录文件 b:块设备文件(block) c:字符设备文件(character) l:符号链接文件(symbolic link file) p:命名管道文件( ...
随机推荐
- MySQL数据库的安装
官方下载地址: http://downloads.mysql.com/archives/community/ msi为安装版,zip为免安装版,最新版本的MySQL没有64位windows的msi版囧 ...
- 【H5开发基础】移动端1像素边框问题的解决方案
自从乔帮主提出retina屏以来.可练就了不少前端兄弟的像素眼,有强迫症的伙伴们日子可就煎熬了.为了画出真正的1像素边框,前端猿们也是受尽各浏览器的虐待了. 关于什么是移动端1像素边框问题,先上两张图 ...
- HDU 2485 Destroying the bus stations (IDA*+ BFS)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2485 题意:给你n个点,m条相连的边,问你最少去掉几个点使从1到n最小路径>=k,其中不能去掉1, ...
- cocos2d-x 2.2.3 之菜单分析(1)
TextEdit-Menu CCtextFieldTTF cocos2d – x 中提供的 bool T04ZORDER::init() { if (!CCLayer::init()) { retur ...
- crtmpserver 基本流程分析
近期在研究crtmpserver,这里记录下学习过程,首先我们先分析下基本流程. 1.初始化流程 InitNetworking---初始化网络 Initialize Logger::Init()--- ...
- cache 的设计与实现--转载
本文整理自一下两篇博客:http://my.oschina.net/ScottYang/blog/298727http://my.oschina.net/u/866190/blog/188712 Ca ...
- 《UNIX网络编程》之多客户连接服务端,可重用套接字对
该网络编程之客户端与服务端程序模板支持: 1. 多客户端同时连接服务端,即服务程序可以同时为多个客户端服务: 2. 服务端支持套接字对重用,即即使处于TIME_WAIT状态,仍可支持服务端重启: 3. ...
- C++之static
一.静态全局变量和非静态全局变量 1. 隐藏作用 比较非静态全局变量和静态(static)全局变量: 对于多个文件的代码,非静态全局变量和函数都是全局可见的.举例如下: a.c中: #include& ...
- 几个常用的ps命令
1. ps aux If you are looking for a short summary of the active processes, use ps aux [root@rhel7 tm ...
- 公共Webservice
网络上可供测试的Web Service腾讯QQ在线状态 WEB 服务Endpoint: http://www.webxml.com.cn/webservices/qqOnlineWebService. ...