一、基础

定义:数据库、表、列相关信息的描述。
    何时使用:想取得对数据库的信息时使用。
    一】数据库元数据——通过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元数据的更多相关文章

  1. Angular2中的metadata(元数据)

    @Attrubute() 从host element 中获得普通(不是@Input)属性对应的值 适用于组件嵌套或指令, 从父组件向子组件传递数据 app.component.ts import {C ...

  2. .NET/ASP.NETMVC Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(一)

    .NET/ASP.NETMVC Model元数据.HtmlHelper.自定义模板.模板的装饰者模式(一) 阅读目录: 1.开篇介绍 2.Model与View的使用关系(数据上下文DataContex ...

  3. SQLSERVER中的元数据锁

    SQLSERVER中的元数据锁 网上对于元数据锁的资料真的非常少 元数据锁一般会出现在DDL语句里 下面列出数据库引擎可以锁定的资源 资源 说明 RID 用于锁定堆(heap)中的某一行 KEY 用于 ...

  4. Salesforce和SAP Netweaver里数据库表的元数据设计

    从Salesforce官网可以了解到Salesforce的force.com平台里数据库表的设计:https://developer.salesforce.com/page/Multi_Tenant_ ...

  5. Java注解-元数据、注解分类、内置注解和自定义注解|乐字节

    大家好,我是乐字节的小乐,上次说过了Java多态的6大特性|乐字节,接下来我们来看看Java编程里的注解. Java注解有以下几个知识点: 元数据 注解的分类 内置注解 自定义注解 注解处理器 Ser ...

  6. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  7. Hadoop HA高可用性架构和演进分析(转)

    1.概况 截至目前,Apache Hadoop版本分为两代,我们将第一代Hadoop称为Hadoop 1.0,第二代Hadoop称为Hadoop 2.0.前者主要有如下几种实现方式:1)社区版本基于S ...

  8. sql server 锁

     锁模式 锁模式 说明 共享 (S) 用于不更改或不更新数据的读取操作,如 SELECT 语句. 更新 (U) 用于可更新的资源中. 防止当多个会话在读取.锁定以及随后可能进行的资源更新时发生常见形式 ...

  9. 常用命令[Linux]

    Linux文件类型 -:普通文件(f) d:目录文件 b:块设备文件(block) c:字符设备文件(character) l:符号链接文件(symbolic link file) p:命名管道文件( ...

随机推荐

  1. iOS开发之自定义输入框(利用UITextField及UITextView)

    drawRect的工作原理:首先苹果是不推荐我们直接使用drawRect进行工作的,直接调用他也是没有任何效果的.苹果要求我们调用UIView类中的setNeedsDisplay方法,则程序会自动调用 ...

  2. oracle锁表解决方法

    SQL> select session_id from v$locked_object; SESSION_ID----------142 SQL> SELECT sid, serial#, ...

  3. eclipse快捷键总结

    一.自定义快捷键 Window->Preferences->General->keys,进入快捷键管理界面,可以修改默认功能的快捷键组合例:修改以下快捷键功能(快捷键组合尽量保持唯一 ...

  4. Android 布局 ViewGroup

    布局 res/layout 命名规则(全部小写) activity_ fragment_ item_ 基础组件 com.android.widget包下 父类View view:屏幕上一块矩阵区域 能 ...

  5. HDU 2485 Destroying the bus stations (IDA*+ BFS)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2485 题意:给你n个点,m条相连的边,问你最少去掉几个点使从1到n最小路径>=k,其中不能去掉1, ...

  6. hdu 3642 Get The Treasury (三维的扫描线)

    题目大意: 给出N个立方体. 求一个三维空间中被包围三次的空间的体积之和. 思路分析: 发现Z的范围非常小.那么我们能够枚举Z轴,然后对 x y做扫描线. 并且不用枚举全部的Z ,仅仅须要将Z离散化之 ...

  7. HNC-局部联想脉络

    局部联想脉络 概念分为:抽象概念.具体概念 对抽象概念用 五元组 和 语义网络 表达 对具体概念用 挂靠展开近似 表达 五元组:动态.静态.属性.值.效应.(u,g,u,z,r),用于表达抽象概念的外 ...

  8. SGU131--NYOJ435

    参考blog http://m.blog.csdn.net/blog/u012760629/36927465 http://www.cppblog.com/menrowitianya/archive/ ...

  9. linux下软件安装与卸载

    linux上软件二进制安装主要分为:rpm手动安装和yum在线安装(其所安装的都为rpm二进制包). 关于rpm手动安装,学习后面内容前需分清如下内容: 包全名 : 操作的包是没有安装的软件包时,使用 ...

  10. OpenXml2.0 - 找不到类型或命名空间名称“DocumentFormat”

    在使用 OpenXml SDK2.0的过程中,很是郁闷的是总是报 '找不到类型或命名空间名称“SpreadsheetDocument”(是否缺少 using 指令或程序集引用?)'的错误,命名已经添加 ...