封装JDBC的一个通用增删改查工具类,将数据集rs转为list

来源:互联网 发布:谷歌浏览器怎么优化 编辑:程序博客网 时间:2024/05/16 08:24
import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import com.oracle.util.DBUtil;public class DBExcute {       public static Connection conn;       public static PreparedStatement ps;       public static ResultSet rs;/**@author frunqer   *@time 2016年5月11日 下午3:08:47   * 专门用来执行增删改的方法 */   public static boolean  ExcuteNoQuery(String sql,Object[] params){       boolean flag=false;       conn=DBUtil.getConn();       try {           conn.setAutoCommit(false);//增删改是需要事物支持的        ps=conn.prepareStatement(sql);        if(params!=null&&params.length>0){            for(int i=0;i<params.length;i++){                ps.setObject(i+1, params[i]);            }        }        int result=ps.executeUpdate();        if(result>0){            flag=true;            conn.commit();        }    } catch (SQLException e) {        e.printStackTrace();        try {            System.out.println("@增删改出现异常,执行回滚操作@");            conn.rollback();        } catch (SQLException e1) {            e1.printStackTrace();        }    }       finally{           try {            conn.setAutoCommit(true);        } catch (SQLException e) {            e.printStackTrace();        }           DBUtil.closeConn(conn, ps, rs);       }       return flag;   }/**@author frunqer   *@time 2016年5月11日 下午3:10:24   *  聚合函数的查询,返回结果是一个一行一列的查询方式,例如count方法 */   public static int ExecuteScalar(String sql,Object[] params){       int scalar=0;       conn=DBUtil.getConn();       try {        ps=conn.prepareStatement(sql);        if(params!=null&&params.length>0){            for(int i=0;i<params.length;i++){                ps.setObject(i+1, params[i]);            }        }        rs=ps.executeQuery();        while(rs.next()){            scalar=rs.getInt(1);        }    } catch (SQLException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }finally{           DBUtil.closeConn(conn, ps, rs);       }       return scalar;   }/**@author frunqer   *@time 2016年5月11日 下午3:20:53   *  专门用来执行查询操作 */   public static List<? extends Object> ExecuteReader(String sql,Object[] params,Class<?> clz){       List rslist=new ArrayList();       conn=DBUtil.getConn();       try {        ps=conn.prepareStatement(sql);        if(params!=null&&params.length>0){            for(int i=0;i<params.length;i++){                ps.setObject(i+1, params[i]);            }        }        rs=ps.executeQuery();    } catch (SQLException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }       rslist=DBExcute.RsToList(rs, clz);       return rslist;   }   /**    * 查询单个实体    */   public static Object ExecuteObject(String sql,Object[] params,Class<?> clz){       Object object=null;       conn=DBUtil.getConn();       try {        ps=conn.prepareStatement(sql);        if(params!=null&&params.length>0){            for(int i=0;i<params.length;i++){                ps.setObject(i+1, params[i]);            }        }        rs=ps.executeQuery();    } catch (SQLException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }       object=DBExcute.RsToObject(rs, clz);       return object;   }   /**    * 自动封装 将将结果集自动转换为list    * @param rs    * @param clz    * */   public static List<? extends Object> RsToList(ResultSet rs,Class clz){       List rslist=new ArrayList();       try {           //获取数据集的元数据        ResultSetMetaData metaData=rs.getMetaData();        int clumnCount=metaData.getColumnCount();        Field[] fields=clz.getDeclaredFields();        /*for(int i=1;i<=clumnCount;i++){            String clumnName=metaData.getColumnName(i);        }*/        while(rs.next()){            Object obj=clz.newInstance();            for(int i=1;i<=clumnCount;i++){                //获取数据库列名称的一些属性                String columnName=metaData.getColumnName(i); //列名                //int jdbcType=metaData.getColumnType(i);     //数据库中的类型                String javaType=metaData.getColumnClassName(i);                /*System.out.println("列类名:"+i+metaData.getColumnClassName(i));*/                String begin=columnName.substring(0, 1).toUpperCase(); //拼接set方法名称,以实现反射。                String end=columnName.substring(1, columnName.length());                String method="set"+begin+end;                //获取列的值                Object columnValue=rs.getObject(i);                //JDBC数据类型转换为JAVA数据类型                Class<?> javaTypeClass=Class.forName(javaType);              /*  Class typeClass=JDBCTypesUtils.jdbcTypeToJavaType(jdbcType);*/                                 Method setMethod=clz.getDeclaredMethod(method, javaTypeClass);                 setMethod.invoke(obj, columnValue);            }            rslist.add(obj);        }    } catch (SQLException | InstantiationException | IllegalAccessException | NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException | ClassNotFoundException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }    return rslist;   }   /**    * 自动封装 将结果集自动转换为Object    * @param rs    * @param clz    * */   public static Object RsToObject(ResultSet rs,Class clz){       Object object=null;       try {           //获取数据集的元数据        ResultSetMetaData metaData=rs.getMetaData();        int clumnCount=metaData.getColumnCount();        Field[] fields=clz.getDeclaredFields();        /*for(int i=1;i<=clumnCount;i++){            String clumnName=metaData.getColumnName(i);        }*/        while(rs.next()){             object=clz.newInstance();            for(int i=1;i<=clumnCount;i++){                //获取数据库列名称的一些属性                String columnName=metaData.getColumnName(i); //列名                int jdbcType=metaData.getColumnType(i);     //数据库中的类型                String javaType=metaData.getColumnClassName(i);                /*System.out.println("列类名:"+i+metaData.getColumnClassName(i));*/                String begin=columnName.substring(0, 1).toUpperCase(); //拼接set方法名称,以实现反射。                String end=columnName.substring(1, columnName.length());                String method="set"+begin+end;                //获取列的值                Object columnValue=rs.getObject(i);                //JDBC数据类型转换为JAVA数据类型                Class javaTypeClass=Class.forName(javaType);              /*  Class typeClass=JDBCTypesUtils.jdbcTypeToJavaType(jdbcType);*/                                 Method setMethod=clz.getDeclaredMethod(method, javaTypeClass);                 setMethod.invoke(object, columnValue);            }        }    } catch (SQLException | InstantiationException | IllegalAccessException | NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException | ClassNotFoundException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }    return object;   }}
0 0