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步骤中编写的类即可