Spring JDBC学习笔记(3):使用JdbcTemplate来获取数据库表和列的元数据
来源:互联网 发布:python impacket库 编辑:程序博客网 时间:2024/06/07 01:13
本篇文章才是我写这一个系列文章的目的,原来我一般都是使用jdbc获取数据库的元数据,但是有点让我很不爽,每次查数据表和列的时候都要自己写“TABLE_NAME”和“COLUMN_HOME”等名称,所以干脆转到JdbcTemplate实现上。通过JdbcTemplate获取数据库表有两种实现方式:
一、 通过SqlRowSetMetaData类
使用到的类或接口有如下几个:
- org.springframework.jdbc.support.rowset.SqlRowSet接口:该对象和javax.sql.RowSet类相对应,它和RowSet的区别是SqlRowSet中的方法从来不会抛出SQLException异常,通过jdbcTemplate可以获得该对象的实例;
- org.springframework.jdbc.support.rowset.SqlRowSetMetaData接口:是对应于SqlRowSet的元数据接口,和java.sql.ResultSetMetaData相一致,也只是从来不会抛出SQLException异常,通过SqlRowSet可以获得该类的实例;
具体使用实例如下:
SqlRowSet rowSet = jdbcTemplate.queryForRowSet("select * from user limit 0");SqlRowSetMetaData metaData = rowSet.getMetaData();int columnCount = metaData.getColumnCount();for (int i = 1; i <= columnCount; i++) { Map<String,String> fieldMap = new HashMap<String,String>();fieldMap.put("ColumnName", metaData.getColumnName(i));fieldMap.put("ColumnType", String.valueOf(metaData.getColumnType(i)));fieldMap.put("ColumnTypeName", metaData.getColumnTypeName(i));fieldMap.put("CatalogName", metaData.getCatalogName(i));fieldMap.put("ColumnClassName", metaData.getColumnClassName(i));fieldMap.put("ColumnLabel", metaData.getColumnLabel(i));fieldMap.put("Precision", String.valueOf(metaData.getPrecision(i)));fieldMap.put("Scale", String.valueOf(metaData.getScale(i)));fieldMap.put("SchemaName", metaData.getSchemaName(i));fieldMap.put("TableName", metaData.getTableName(i));fieldMap.put("SchemaName", metaData.getSchemaName(i));System.out.println(fieldMap);}上述所用的信息都应列出来了,发现只有一些简单的信息,并没有涉及索引和其他约束等的信息。
二、通过RowCountCallbackHandler类
使用到的类或接口有如下几个:
- org.springframework.jdbc.core.RowCallbackHandler接口:用于处理结果集中的每一行数据;
- org.springframework.jdbc.core.RowCountCallbackHandler类:实现了RowCallbackHandler接口,其中简单的实现了对结果集元数据的获取,包括行数、列数、列名、列的类型等信息,顺便说一下这个类的实例只可以用一次;
在源代码中给出了简单的使用方式,如下:
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); // reusable objectRowCountCallbackHandler countCallback = new RowCountCallbackHandler(); // not reusablejdbcTemplate.query("select * from user", countCallback);int rowCount = countCallback.getRowCount();所有能获得的信息如下:
String sql = "select * from user";RowCountCallbackHandler rcch = new RowCountCallbackHandler();jdbcTemplate.query(sql, rcch);System.out.println("column count :" + rcch.getColumnCount());System.out.println("column count :" + rcch.getRowCount());for(int i=0; i<rcch.getColumnCount(); i++){System.out.println("column name :" + rcch.getColumnNames()[i]);System.out.println("column type :" + rcch.getColumnTypes()[i]);}输出如下:
从输出可以看出有一个问题,列的类型只能用数字来标识,这与java.sql.Types相对应,我们可以通过一下的程序来获得字符串的形式:
String getTypeName(int type) throws SQLException { switch (type) { case Types.ARRAY: break; case Types.BIGINT: return "BIGINT"; case Types.BINARY: return "BINARY"; case Types.BIT: return "BIT"; case Types.BLOB: return "BLOB"; case Types.BOOLEAN: return "BOOLEAN"; //.. }
由以上可知,该类的方法有限,也只能获得列名和列的类型的信息,关于索引和约束等也没有涉及。
相关文章:
- 使用jdbcTemplate查询的三种回调
- Java 6 RowSet 使用完全剖析
- RowSet与ResultSet的区别
- JDBC元数据操作(一)-- DatabaseMetaData接口详解
0 0
- Spring JDBC学习笔记(3):使用JdbcTemplate来获取数据库表和列的元数据
- Spring JDBC学习笔记(1):查询数据库数据之JdbcTemplate的使用
- 使用JdbcTemplate来获取数据库表字段对应的数据
- JDBC获取数据库的元数据信息
- 通过JDBC获取数据库表元数据
- JDBC之使用Spring提供的JdbcTemplate进行数据库操作
- Spring中配置JdbcTemplate的三种方式要使用Jdbctemplate 对象来完成jdbc 操作。
- 使用Spring提供的三个JDBC模板类(JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate)操作数据库
- 使用元数据来优化JDBC对数据库的CURD操作
- Spring JDBC学习笔记(2):JdbcTemplate的增强版NamedParameterJdbcTemplate
- 使用Spring JDBCTemplate简化JDBC的操作(一)
- 使用Spring JDBCTemplate简化JDBC的操作(二)
- JDBC:Spring框架中JDBCTemplate的使用
- 使用Spring的jdbcTemplate简化JDBC操作
- 使用Spring的JdbcTemplate简化jdbc操作
- 使用Spring JDBCTemplate简化JDBC的操作
- 使用Spring JDBCTemplate简化JDBC的操作
- 使用Spring JDBCTemplate简化JDBC的操作
- 流式布局之2012年语法-------------------CSS3盒模型display:flex
- 用NSURLConnection Post上传数据的"+"会变成空格
- 《Thinking in Java》——面向对象:加深理解
- java abstract
- oracle——SQL复习08
- Spring JDBC学习笔记(3):使用JdbcTemplate来获取数据库表和列的元数据
- 欧拉回路
- android设计模式之单例模式
- AngularJS学习之路(一)AngularJS简单操作
- GestureDetector手势初识
- 数据库处理用户上下级关系
- LB 负载均衡的层次结构
- 2015年蓝桥杯B组C/C++:九数组分数
- 最小生成树——(性质)其最大边权为生成树中最大边权最小的——(例题)承包池塘的青蛙