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:命名管道文件( ...
随机推荐
- HTTP学习笔记7-消息报头
41,消息报头-实体报头 请求和响应消息可以传送一个实体.一个实体由实体报头域和实体正文组成,在大多数情况下,实体正文就是请求消息中的请求正文或者响应消息中的响应正文.但是在发送时,并不是说实体报头域 ...
- IOS--跳转方式两种
带导航栏的Push跳转: FloatPassViewController *floatpass = [self.storyboard instantiateViewControllerWithIden ...
- 合泰 HT66F30 定时器初始化
#define TM0_RUN (0<<7) //TM0运行 #define TM0_PAUST (1<<7) //TM0暂停 #define TM0_DIV4 (0<& ...
- TortoiseGit上传代码到GitHub
Github是管理软件开发的首选托管网站,12306的火车票插件一时让国内当时很多小白开发者(当然也包括我)认识到了这个网站.GitHub可以托管各种git库,并提供一个web界面,与 SourceF ...
- PHP函数的默认参数
<?php /** * 函数的参数个数任意 */function foo() { $args = func_get_args(); static $i = 0; //统计参数个数 /* fore ...
- [转] Linux写时拷贝技术(copy-on-write)
PS:http://blog.csdn.net/zxh821112/article/details/8969541 进程间是相互独立的,其实完全可以看成A.B两个进程各自有一份单独的liba.so和l ...
- OpenStack对象存储——Swift
OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之一,被称为对象存储,提供了强大的扩展性.冗余和持久性.本文将从架构.原理 和实践等几方面讲述S ...
- python对象(腌制)
python的内置对象类型主要有数字,字符串,列表,元祖,字典,集合等等,在python中,一切皆为对象 #腌制在python中如果我们有一些对象需要持久性存储,并且不丢失我们这个对象的类型与数据,我 ...
- (转)\r \r\n \t 的区别
小风吹雪 \r \r\n \t 的区别 http://www.360doc.com/content/12/0530/15/16538_214756101.shtml \n 软回车: 在Wi ...
- RecyclerView更通用——listView的onItemClick,onLongItemClick,addHeaderView,addFooterView
一.点击事件 setOnItemClickListener,setOnItemLongClickListener RecyclerView中虽然没有提供上面这两个接口,但是给我们提供了另外一个接口:O ...