元数据 --- 如何编写JDBC框架--DBUTILS框架
来源:互联网 发布:庆应大学留学费用 知乎 编辑:程序博客网 时间:2024/05/19 19:40
元数据:数据库、表、列的定义信息
DataBaseMetaData 对象
用Connection对象的getMetaData()方法来获取DataBaseMetaData对象。
方法:
ParameterMetaData 对象
PreparedStatement.getParameterMetaData() 来获取对象
方法:
getParameterCount() :获得指定参数的个数
getParameterType(int param) :获得指定参数的sql类型(驱动可能不支持)
ResultSetMetaData 对象
ResultSet. getMetaData() 来获取对象
方法:
getColumnCount() :返回resultset对象的列数
getColumnName(int column) :获得指定列的名称
getColumnTypeName(int column):获得指定列的类型 java.sql.Types
例:
package com.itheima.utils;import java.sql.Connection;import java.sql.ParameterMetaData;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Statement;import java.util.List;import com.mchange.v2.c3p0.ComboPooledDataSource;public class JdbcUtils {private static ComboPooledDataSource ds;static {ds = new ComboPooledDataSource("mysql");}public static Connection getConnection() throws SQLException {return ds.getConnection();}public static void release(ResultSet rs, Statement stmt, Connection conn) {if (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}rs = null;}if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}stmt = null;}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}conn = null;}}public static void update(String sql, Object[] params) {Connection conn = null;PreparedStatement stmt = null;ResultSet rs = null;try {conn = JdbcUtils.getConnection();stmt = conn.prepareStatement(sql);ParameterMetaData pmd = stmt.getParameterMetaData();int count = pmd.getParameterCount();if (params.length == count) {for (int x = 0; x < count; x++) {stmt.setObject(x + 1, params[x]);}stmt.executeUpdate();} else {throw new RuntimeException("参数不正确!");}} catch (SQLException e) {throw new RuntimeException("执行失败");} finally {release(rs, stmt, conn);}}public static List selectToBean(String sql, Object[] params,ResultSetHandler rsh) {Connection conn = null;PreparedStatement stmt = null;ResultSet rs = null;try {conn = JdbcUtils.getConnection();stmt = conn.prepareStatement(sql);rs = stmt.executeQuery();return (List) rsh.handler(rs);} catch (SQLException e) {throw new RuntimeException(e);}}}
package com.itheima.utils;import java.beans.IntrospectionException;import java.beans.PropertyDescriptor;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;public interface ResultSetHandler {public Object handler(ResultSet rs);}class myHandler implements ResultSetHandler {private Class clazz;public myHandler(Class clazz) {this.clazz = clazz;}@Overridepublic Object handler(ResultSet rs) {List list = new ArrayList();try {while (rs.next()) {try {Object bean = clazz.newInstance();ResultSetMetaData rsmd = rs.getMetaData();int count = rsmd.getColumnCount();for (int x = 0; x < count; x++) {String columnName = rsmd.getColumnName(x + 1);Object columnValue = rs.getObject(columnName);try {PropertyDescriptor pd = new PropertyDescriptor(columnName, bean.getClass());Method method = pd.getWriteMethod();method.invoke(bean, columnValue);} catch (Exception e) {continue;}}list.add(bean);} catch (Exception e) {e.printStackTrace();}}return list;} catch (SQLException e) {throw new RuntimeException(e);}}}
DBUtils框架
Apatch提供DBUtils开源JDBC工具类库
API介绍
org.apache.commons.dbutils.QueryRunner :DBAssist
org.apache.commons.dbutils.ResultSetHandler
工具类:
org.apache.commons.dbutils.DbUtils
提供如关闭连接、装载JDBC驱动程序等常规工作的工具类,里面的所有方法都是静态的。
方法:
QueryRunner类
该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。
QueryRunner类提供了两个构造方法:
默认的构造方法
需要一个 javax.sql.DataSource 来作参数的构造方法。
大文本操作
方法:
ResultSetHandler 接口
该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式。
ResultSetHandler 接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)。
实现类:
ArrayHandler:把结果集中的第一行数据转成对象数组。
ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
ColumnListHandler:将结果集中某一列的数据存放到List中。
KeyedHandler(name):将结果集中的每一行数据都封装到一个Map<列名,列值>里,再把这些map再存到一个map里,其key为指定的key(指定的key就是我们指定哪个字段名为key)
MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
ScalarHandler:select count(*) from account;可以取出count(*)的值。
- 元数据 --- 如何编写JDBC框架--DBUTILS框架
- JDBC元数据和DbUtils框架
- 元数据与jdbc框架
- DBUtils框架简化JDBC开发
- 模仿dbutils的jdbc框架
- 连接池,元数据与jdbc框架
- JDBC框架 和 Apache—DBUtils框架
- 方立勋_30天掌握JavaWeb_自己编写jdbc框架、dbutils框架(未完)
- day15 JDBC元数据 DBUtils 开发模型
- 自定义JDBC框架(仿DBUtils)
- JDBC框架入门及DBUtils的入门
- jdbc之Apache—DBUtils框架
- 简单JDBC框架——DBUtils
- 编写JDBC框架
- 自己编写jdbc框架
- dbutils框架
- DBUtils 框架
- DBUtils框架
- PMP 英文术语缩写
- Linux入门:常用目录介绍
- JQuery Mobile移动Web应用开发(3):Splash Screen
- Sheldon Cooper
- Swing 边框Border
- 元数据 --- 如何编写JDBC框架--DBUTILS框架
- 继承和派生
- js关键字typeof和instanceof的使用,以及js字符串与数字相互转化
- Python基础:Python可变对象和不可变对象
- Unix环境高级编程学习笔记(十) 进程间通信
- 在 Windows 上安装和使用 GNUstep 和 Objective-C
- Swing paint和paintComponent方法的关系
- POJ 3740 Easy Finding(舞蹈链)
- 必须你死我活?也谈3B,3Q,3M