JDBC 学习复习10 编写自己的JDBC框架

首先万分感谢狼哥 孤傲苍狼 博客,整个jdbc学习的博客资料 链接为http://www.cnblogs.com/xdp-gacl/p/4006830.html

详细代码见狼哥博客,列出我学习过程中遇到的问题吧。

public static Object query(String sql, Object[] params, ResultSetHandler rsh)
            throws SQLException {
        Connection conn = null;
        PreparedStatement ppst = null;
        ResultSet rs = null;
        try {

            conn = getConnection();
            ppst = conn.prepareStatement(sql);
            for (int i = 0; i < params.length; i++) {
                ppst.setObject(i + 1, params[i]);
            }
            rs = ppst.executeQuery();
            return rsh.handler(rs);//关于这个策略模式的学习,详见设计模式吧,熟悉这种写法,在公司的工作过程中,类似写法遇到过,有用!
        } finally {
            release(conn, ppst, rs);
        }
    }

后面这么调用的

public User queryByID(int id) throws SQLException{
        String sql = "select * from user where uid=?";
        return (User) JDBCUtil.query(sql,new Object[]{id}, new BeanHandler(User.class));
    }

然后BeanHandler实际上就是ResultSetHandler 借口的实现类,主要目的就是把查询结果,放到通过发射获取到的JavaBean里面,也就从数据库里面加载到JVM内存里了

package dbex.domain;

import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

public class BeanHandler implements ResultSetHandler {
    private Class<?> clazz;

    public BeanHandler(Class<?> clazz) {
        this.clazz = clazz;
    }

    public Object handler(ResultSet rs) {
        Object bean=null;
        try {
            if (!rs.next()) {//判空 直接返回null
                return bean;
            }
            // 把resultset对象中的列数据放入到Bean对应的属性中去
            bean = clazz.newInstance();
            ResultSetMetaData rsm = rs.getMetaData();
            int len = rsm.getColumnCount();
            for (int i = 0; i < len; i++) {
                String name = rsm.getColumnName(i + 1);
                Object data = rs.getObject(i+1);
                Field field = clazz.getDeclaredField(name);
                field.setAccessible(true);
                String type = rsm.getColumnTypeName(i+1);
//              if("INTEGER".equals(type)){
//                  System.out.println(type);
                    field.set(bean,data.toString());
//              }else if("String".equalsIgnoreCase(type)){
//                  field.set(bean,(String)data);
//                  System.out.println(type);
//              }else{
//                  field.set(bean, data);
//              }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bean;
    }

}

总结下:策略模式 ,java反射

时间: 2024-10-09 20:12:36

JDBC 学习复习10 编写自己的JDBC框架的相关文章

JDBC学习笔记(10):DAO设计思想与骨架搭建(小练习)

实体类User: 1 package com.xxyh.jdbc.domain; 2 3 import java.util.Date; 4 5 public class User { 6 private int id; 7 private String name; 8 private Date birthday; 9 private float money; 10 11 public int getId() { 12 return id; 13 } 14 public void setId(in

【转】JDBC学习笔记(5)——利用反射及JDBC元数据编写通用的查询方法

转自:http://www.cnblogs.com/ysw-go/ JDBC元数据 1)DatabaseMetaData /** * 了解即可:DatabaseMetaData是描述数据库的元数据对象 * 可以由Connection得到 */ 具体的应用代码: 1 @Test 2 public void testDatabaseMetaData(){ 3 Connection connection=null; 4 ResultSet resultSet=null; 5 try { 6 conne

JDBC学习笔记(10)——调用函数&amp;存储过程

如何使用JDBC调用存储在数据库中的函数或存储过程: * 1.通过COnnection对象的prepareCall()方法创建一个CallableStatement *    对象的实例,在使用Connection对象的prepareCall() 方法时,需要传入一个String类型的字符串, *    该字符串用于指明如何调用存储过程 * 2.通过CallableStatement对象的registerOutParameter() 方法注册Out参数 * 3.通过CallableStateme

JDBC 学习复习7 学习 Apache 开源DBCP 数据源

DBCP(DataBase connection pool),数据库连接池.是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件.单独使用dbcp需要2个包:commons-dbcp.jar,commons-pool.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去. Tomcat 的连接池正是采用该连接池来实现的.该数据库连接池既可以与

javaweb学习总结(四十)——编写自己的JDBC框架

一.元数据介绍 元数据指的是"数据库"."表"."列"的定义信息. 1.1.DataBaseMetaData元数据 Connection.getDatabaseMetaData()获得代表DatabaseMetaData元数据的DatabaseMetaData对象. DataBaseMetaData对象的常用方法: getURL():返回一个String类对象,代表数据库的URL. getUserName():返回连接当前数据库管理系统的用户名.

JDBC学习笔记一

JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数据库 创建SQL或MySQL语句 在数据库中执行SQL或MySQL查询 查看和修改记录 JDBC架构   JDBC API支持两层和三层的处理模式对数据库的访问,但一般JDBC体系结构由两层组成: JDBC API: 这提供了应用程序到JDBC管理器连接. JDBC Driver API: 这支持J

JDBC学习笔记二

Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.Statement对象,用于执行不带参数的简单SQL语句. 通过JDBC向指定的数据表中插入一条记录,需要注意下面的几点: * 1.Statement:用于执行SQL语句的对象 * 1).通过COnnection的createStatement()方法来获取 * 2).通过excuteUpdate(sql)可以执行S

【转】JDBC学习笔记(1)——JDBC概述

转自:http://www.cnblogs.com/ysw-go/ JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数据库 创建SQL或MySQL语句 在数据库中执行SQL或MySQL查询 查看和修改记录 JDBC架构   JDBC API支持两层和三层的处理模式对数据库的访问,但一般JDBC体系结构由两层组成: JDBC API: 这提供了应用程

【转】JDBC学习笔记(2)——Statement和ResultSet

转自:http://www.cnblogs.com/ysw-go/ Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.Statement对象,用于执行不带参数的简单SQL语句. 通过JDBC向指定的数据表中插入一条记录,需要注意下面的几点: * 1.Statement:用于执行SQL语句的对象 * 1).通过COnnection的createStatement()方