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