自定义Dbutils

来源:互联网 发布:mysql数据库忘记密码 编辑:程序博客网 时间:2024/06/03 15:41

1、

package cn.itcast.frame.utils;


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


/*
 * "select * from account where id=?"--> 一条记录
     Java中: Account a 
              情况二: ResultSet只有一条记录,将这条记录封装到一个JavaBean中      
              处理器: BeanHandler   implements ResultSetHandler  
 */
public class BeanHandler implements ResultSetHandler {


private Class clazz;
    /**
     * 
     * @param clazz: 将结果集中的记录封装到该类的一个实例中
     */
public BeanHandler(Class clazz){
this.clazz = clazz;
}

@Override
public Object handler(ResultSet rs) {
if(rs == null){
return null;
}

//定义该类的一个实例
Object instance = null;
try {
//创建该类的实例
instance = clazz.newInstance();

//取出结果集中元数据(结果集的元数据)
ResultSetMetaData metaData = rs.getMetaData();

//结果集中的列数
int columnCount = metaData.getColumnCount();

if(rs.next()){
//取出该行上的每个列
for(int i=0;i<columnCount;i++){
//该列的名字
String columnName = metaData.getColumnName(i+1);
//取该列的值
Object value = rs.getObject(columnName);

//得到该类clazz的某个属性
Field f = clazz.getDeclaredField(columnName);

//暴力反射
f.setAccessible(true);

//将该值放到该属性上
//将value放到instance对象的f属性上
f.set(instance, value);
}
}
} catch (Exception e) {
e.printStackTrace();
}

return instance;
}


}



2、

package cn.itcast.frame.utils;


import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;


/*
 * "select * from account" --> 集合
     Java中: List<Account>   
              情况一:把ResultSet集合中每条记录封装到一个JavaBean中,然后将这些JavaBean加入一个集合中
              处理器: BeanListHandler implements ResultSetHandler
 */
public class BeanListHandler implements ResultSetHandler {


private Class clazz;

public BeanListHandler(Class clazz){
this.clazz = clazz;
}

@Override
public Object handler(ResultSet rs) {
if(rs == null){
return null;
}

List list = new ArrayList();
try {
//取出结果集的元数据
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();

while(rs.next()){
//取一条记录,生成该类的实例
Object instance = clazz.newInstance();

//取出该行上的每个列
for(int i=0;i<columnCount;i++){
String columnName = metaData.getColumnName(i+1);
Object value = rs.getObject(columnName);

//适用于反射得到类的属性
Field f = clazz.getDeclaredField(columnName);
//设置暴力反射
f.setAccessible(true);
//将value放到instance的f属性上
f.set(instance, value);
}

//将该对象加入集合中
list.add(instance);
}
} catch (Exception e) {
e.printStackTrace();
}

return list;
}


}




3、

package cn.itcast.frame.utils;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


import com.mchange.v2.c3p0.ComboPooledDataSource;


public class JDBCUtils {


//创建一个基于配置文件的C3P0数据库连接池
private static ComboPooledDataSource ds = new ComboPooledDataSource("");

//连接oracle
//private static ComboPooledDataSource ds = new ComboPooledDataSource("oracle");

public static Connection getConnection(){
try {
return ds.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}

//释放资源
public static void release(Connection conn,Statement st,ResultSet rs){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
rs = null;
}
}
if(st != null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
st = null;
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
conn = null;
}
}
}


//作用:支持insert update delete
/* insert:
* sql: insert into account values(?,?,?)
* args:  new Object[]{3,"Mary",1000}

* update:
* sql: update account set money=? where id=?
* args: new Object[]{4000,1}
*/
public static void update(String sql,Object[] args){
Connection conn = null;
PreparedStatement pst = null;
try {
conn = getConnection();
pst = conn.prepareStatement(sql);

//为sql中的参数赋值
for(int i=0;i<args.length;i++){
pst.setObject(i+1, args[i]);
}

//执行SQL
pst.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally{
release(conn, pst, null);
}
}


//需要支持所有的查询
// public static Object query1(String sql,Object[] args,Class clazz){
// return null;
// }

public static Object query(String sql,Object[] args,ResultSetHandler rh){
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
try {
conn = getConnection();
pst = conn.prepareStatement(sql);
for(int i=0;i<args.length;i++){
pst.setObject(i+1, args[i]);
}

//执行查询
rs = pst.executeQuery();

//处理结果集
//调用者知道如何处理结果
return rh.handler(rs);
} catch (Exception e) {
e.printStackTrace();
}finally{
release(conn, pst, rs);
}
return null;
}
}



4、package cn.itcast.frame.utils;


import java.sql.ResultSet;


/*
 * 作用:由客户端程序传递一个该接口的实现,用于处理结果集
 */
public interface ResultSetHandler {


public Object handler(ResultSet rs);
}











































































0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 农民把户口迁入城市后宅基地怎么办 离婚了再婚带孩子在上海上学怎么办 上班几天被公司辞退不发工资怎么办 在单位工作被领导边缘化该怎么办 退休人员户口迁到外地退休金怎么办 招工表填写和实际的有误怎么办 招工时档案年龄有人为改动怎么办 8个月宝贝还不会坐怎么办 朗动导航黑屏过了保修期怎么办 平板突然黑屏开不了机了怎么办 苹果ipad锁屏密码忘了怎么办 公司发资以两张工资表怎么办 面试谈好的工资结果发少了怎么办 老板面试没谈薪资让等电话怎么办 土地局把我的档案弄丢了怎么办 人事关系在医院不去上班怎么办 档案年龄多处涂改无法退休怎么办 个人办理退休原始档案丢了怎么办 在钢厂工作想辞职了怎么办呢 场地合同到期了公司不续签怎么办 应届生没毕业找到工作怎么办入职 公司工资保密同事要看工资条怎么办 考上特岗教师后和老公异地怎么办 档案在无档案保管权限的公司怎么办 辞职了户口迁回农原籍不接收怎么办 当正职直接指挥下级副职领导怎么办 单位申报个税身份证号码填错怎么办 申报个税身份证号码填错了怎么办 办了人事代理联系函商调函怎么办 劳务公司与分包工头算账成怎么办 客户退保业务员己得保险佣金怎么办 投了简历公司打来电话没接到怎么办 跟老板要工资她说过几天怎么办 公路车弯把手小抓不到刹车怎么办 新手骑电动车上路车子一直晃怎么办 不知情收赃东西已经卖了怎么办 档案和派遣证不在同一个地方怎么办 档案缺招工表和派遣证怎么办退休 开发商对接的银行利息比较高怎么办 工作未满一年离职转正定级怎么办 被网络骗贷翻到几十万怎么办