自定义JDBC框架(仿DBUtils)

1. 编写DBAssist类 该类简单化了SQL查询(package com.itheima.dbassist;

import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.sql.DataSource;

import com.itheima.util.JdbcC3p0Util;

public class DBAssist {
  private DataSource ds ;
  public DBAssist(DataSource ds){
   this.ds= ds;
  }
  
  /**
   * 执行add delete update语句   * @param sql  
   * @param params  参数 
   */
  public void update(String sql,Object[] params){
  Connection conn = null;
  PreparedStatement stmt = null;
  ResultSet rs = null;
  try{
   conn = JdbcC3p0Util.getConnection();
   stmt = conn.prepareStatement(sql);
   //设置参数
   ParameterMetaData md = stmt.getParameterMetaData();
   int num = md.getParameterCount();//参数的个数
   for(int i=0;i<num;i++){
    stmt.setObject(i+1, params[i]);
   }
   stmt.executeUpdate();
  }catch(Exception e){
   throw new RuntimeException(e);
  }finally{
   JdbcC3p0Util.release(rs, stmt, conn);
  }
 }
  
  public Object query(String sql,Object[] params,ResultHandler handler){
   Connection conn = null;
  PreparedStatement stmt = null;
  ResultSet rs = null;
  try{
   conn = JdbcC3p0Util.getConnection();
   stmt = conn.prepareStatement(sql);
   //设置参数
   ParameterMetaData md = stmt.getParameterMetaData();
   int num = md.getParameterCount();//参数的个数
   for(int i=0;i<num;i++){
    stmt.setObject(i+1, params[i]);
   }
   rs = stmt.executeQuery();
   
   //将结果集封装到对象中
   Object o = handler.handle(rs);
   
   return o;
   
  }catch(Exception e){
   throw new RuntimeException(e);
  }finally{
   JdbcC3p0Util.release(rs, stmt, conn);
  }
  }
}定义了增删改查方法),它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。




2. 编写ResultHandler接口 该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式。
ResultSetHandler 接口提供了一个单独的方法:<T> T handle(ResultSet rs) 利用泛型做成通用方法

   package com.itheima.dbassist;
   import java.sql.ResultSet;
   public interface ResultHandler {
   //  Object handle(ResultSet rs);
 <T> T handle(ResultSet rs);
   }




3. 编写ResultHandler接口的实现类
以下为简单的实现类(仿BeanUtils中BeanHandler)

 package com.itheima.dbassist.handler;

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

import com.itheima.dbassist.ResultHandler;
/**
 * 查询一条记录
 * 
 * @author a
 * 
 */
public class BeanHandler<T> implements ResultHandler {
 private Class<T> clazz;
 public BeanHandler(Class clazz){
  this.clazz = clazz;
 }
 public T handle(ResultSet rs) {
  try{
   if(rs.next()){
    T o = clazz.newInstance();
    ResultSetMetaData md = rs.getMetaData();
    int cloumnNum = md.getColumnCount();
    for(int i=0;i<cloumnNum;i++){
     String columnName = md.getColumnName(i+1);
     Object columnValue = rs.getObject(columnName);
     Field field = clazz.getDeclaredField(columnName);
     field.setAccessible(true);
     field.set(o, columnValue);
    }
    return o;
   }else
    return null;
  }catch(Exception e){
   throw new RuntimeException(e);
  }
 }
}


4.将编写好的类打成jar包
export --> Jar File -->去掉.classpath及.project和其他相关工具类文件
保留的文件: 只保留1-3步骤中编写的类即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值