通用增删改查的方式

增、删、改通用方法:

public static void updateobj(String sql,Object...args){

        Connection connection=null;
        PreparedStatement pstm=null;

        try{

        connection=  JDBCUtill.getConnection();

        pstm=connection.prepareStatement(sql);

        for(int i=0;i<args.length;i++) {
            pstm.setObject((i + 1), args[i]);
        }
          //执行操作
        pstm.executeUpdate();

        } catch (Exception e) {

            e.printStackTrace();
        }finally{
            //关闭
            JDBCUtill.colseResource(pstm,connection);
        }

    }

 

通用查询一组数据的方法:

//Class<T>clazz:返回的值得类型
    //sql SQL语句返回值
    //object...args  动态可变参数

    public static <T> T selectobj(Class<T> clazz,String sql,Object...args){

        Connection connection=null;
        PreparedStatement pstm=null;
        ResultSet rs=null;

        try{
            //连接数据库
            connection=  JDBCUtill.getConnection();

            pstm=connection.prepareStatement(sql);

            //填充占位符
            for(int i=0;i<args.length;i++) {
                pstm.setObject((i + 1), args[i]);
            }
            //执行操作
            rs=pstm.executeQuery();

            //创建一个元数据类型接收返回值
            ResultSetMetaData metaData=rs.getMetaData();

            //获取数据表中的字段数(列数)
            int count=metaData.getColumnCount();

            T t=clazz.newInstance();  //等同于 User user =new User;

            //判断是否有值,然后打印
            if(rs.next()){
                for(int i=0;i<count;i++){
                    //获取对应的字段的值
                    Object value=rs.getObject((i+1));
                    //获取到对应字段的别名
                    String label=metaData.getColumnLabel((i+1));
                    //获取到对应的字段
                    Field field = clazz.getDeclaredField(label);
                    //设置可以自己设置值得权限
                    field.setAccessible(true);
                    //将值装配给对象
                    field.set(t,value);
                }
                return t;
                }

        } catch (Exception e) {

            e.printStackTrace();
        }finally {
            JDBCUtill.colseResource2(rs,pstm,connection);
        }

        return null;
    }

 

通用查询所有数据的方法:

public <T> List<T> queryMore(Class<T> clazz,String sql,Object...args){
        Connection conn =null;
        PreparedStatement pstm=null;
        ResultSet rs= null;
        List<T> list = new ArrayList<T>();
        try {
        //1.连接数据
        conn= JdbcUtils.getconn();
        
        //2.编写带有占位符的sql(省略)
        
        //3.预编译sql
            pstm=conn.prepareStatement(sql);
        //4.填充占位符
            for(int i=0;i<args.length;i++){
                pstm.setObject(i+1, args[i]);
            }
        //5.执行
            rs=pstm.executeQuery();
            //需要用到元数据
            ResultSetMetaData rsmd = rs.getMetaData();
            //获取具体的列数
            int columnCount = rsmd.getColumnCount();
            
            while(rs.next()){
                T t = clazz.newInstance();
                for(int i=0;i<columnCount;i++){
                    //获取具体列的值
                    Object value = rs.getObject(i+1);
                    //获取列的别名
                    String label = rsmd.getColumnLabel(i+1);
                    //通过反射向对象设置值
                    Field field = clazz.getDeclaredField(label);
                    //给其权限设置值
                    field.setAccessible(true);
                    field.set(t, value);
                }
                list.add(t);
            }
            return list;
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            //6.关闭
            JdbcUtils.close(rs, pstm, conn);
        }    
        return null;
    }
————————————————

 

上一篇:25.Python:控制文件指针操作seek


下一篇:在SQL Server中使用种子表生成流水号注意顺序