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

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;

   }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的示例代码: ```java import java.sql.*; import java.util.ArrayList; import java.util.List; public class UserDAO { private static final String DB_URL = "jdbc:mysql://localhost:3306/mydatabase"; // 数据库连接地址 private static final String DB_USER = "root"; // 数据库用户名 private static final String DB_PASSWORD = "password"; // 数据库密码 public static List<User> getAllUsers() { List<User> users = new ArrayList<>(); try { // 加载数据库驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 获取数据库连接 Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); // 创建查询语句 String query = "SELECT id, username, password, email FROM users"; // 创建 Statement 对象 Statement stmt = conn.createStatement(); // 执行查询语句 ResultSet rs = stmt.executeQuery(query); // 遍历结果集 while (rs.next()) { // 获取每一行数据的各个字段值 int id = rs.getInt("id"); String username = rs.getString("username"); String password = rs.getString("password"); String email = rs.getString("email"); // 将数据封装成 User 对象 User user = new User(id, username, password, email); // 将 User 对象添加到 List 中 users.add(user); } // 关闭连接 rs.close(); stmt.close(); conn.close(); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } return users; } } ``` 上面的代码中,`User` 类是一个普通的 JavaBean,用于封装用户信息。`getAllUsers()` 方法使用 JDBC API 查询数据库中的所有用户信息,并将其封装一个 `List<User>` 集合返回。在代码中,需要根据实际情况修改数据库连接地址、用户名和密码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值