一、基础

定义:数据库、表、列相关信息的描述。
    何时使用:想取得对数据库的信息时使用。
    一】数据库元数据——通过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. HDU2050(分平面问题)

    分平面问题: 一.n条直线最多分平面问题. n条直线最多可以把平面分成多少个区域? 此类问题主要采用递归的思想.当有n-1条直线时,平面最多被分成了f(n-1)块区域.如果要使第n条直线分的区域最多, ...

  2. python:文本文件处理

    # coding=utf-8 #将列表写入文件 :'w+'(覆盖原有文件内容),'a+'(在原文件的基础上追加) def write_list_test(path,savelist,pattarn): ...

  3. Spring 3.2 ClassMetadataReadingVisitor 错误

    nested exception is java.lang.IncompatibleClassChangeError: class org.springframework.core.type.clas ...

  4. org.apache.struts.chain.commands.InvalidPathException: No action config found for the specified url.

    No action config found for the specified url url路径下找不到action,原因是stuts-config.xml文件配置错误. demo的项目文件如下: ...

  5. js中方法类型比较

    参考链接 http://bbs.csdn.net/topics/390775296/ function People(name){this.name=name;//对象方法this.Introduce ...

  6. spring mvc model.addAttribute页面c:forEach取不到

    昨天和今天都在解决一个问题,即: @RequestMapping(value = "/listAccounts", method = RequestMethod.GET) publ ...

  7. C++ —— 类的基础

    C++类的设计与基础       2015.9.11 1.变量和常量的命名:确定程序中的变量.常量.函数的名字都是具有描述性的名字,具有直接的意义.如numberOfStudent 比 numOfSt ...

  8. MySQL行列转换

    分类: Mysql/postgreSQL 在某些数据库中有交叉表,但在MySQL中却没有这个功能,但网上看到有不少朋友想找出一个解决方法,特发贴集思广义.http://topic.csdn.net/u ...

  9. CSS3实现文字描边

    -webkit-text-shadow:#000 1px 0 0,#000 0 1px 0,#000 -1px 0 0,#000 0 -1px 0; -moz-text-shadow:#000 1px ...

  10. Sqlserver查询表结构信息-字段说明、类型、长度等信息

    Sqlserver 中查询表结构信息-字段说明.类型.长度等信息综合语法. SELECT 表名 = d.name,--case when a.colorder=1 then d.name else ' ...