码迷,mamicode.com
首页 > 数据库 > 详细

jdbc 可处理事物的通用增删查改函数

时间:2019-11-13 22:30:29      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:ext   result   增删改   泛型   机制   --   编译   trace   return   

首先弄清四种隔离级别的和三种数据并发 之间的关系

通用查询函数

//使用PreparedStatement实现对不同表的通用的返回一个对象的查询操作
    //使用泛型机制,参数里先传入一个类的类型
    public static <T> T getInstance(Connection con,Class<T> clazz,String sql,Object...args) {
        PreparedStatement ps = null;
        ResultSet res = null;
        try {
            ps=con.prepareStatement(sql);
            for(int i=0;i<args.length;i++) {
                ps.setObject(i+1, args[i]);
            }
                        
            //获得数据集和元数据集
            res = ps.executeQuery();
            ResultSetMetaData rsmd = res.getMetaData();
            int col = rsmd.getColumnCount();
            
            if(res.next()) {
                T t = clazz.newInstance();
                for(int i=0;i<col;i++) {
                    Object value = res.getObject(i+1);          //要获得的数据值
                    String colLabel = rsmd.getColumnLabel(i+1);    //要获得的元数据名称
                    
                    //通过反射给t对象指定的colName属性赋值为value
                    Field field = clazz.getDeclaredField(colLabel);
                    
                    field.setAccessible(true);
                    field.set(t,value);
                }
                
                System.out.println("执行成功");
                return t;
            }
            
        }
        catch(Exception ex) {
            ex.printStackTrace();
        }
        finally {
            JDBCUtils.closeResource(null, ps, res);
        }
        
        return null;
    }
    
    //返回对不同表的通用的返回多个对象的查询操作 --考虑上事物的版本
    public static <T> ArrayList<T> getForList(Connection con,Class<T> clazz,String sql,Object...args){
        PreparedStatement ps = null;
        ResultSet res = null;
        try {
            con=JDBCUtils.getConnection();
            ps=con.prepareStatement(sql);
            for(int i=0;i<args.length;i++) {
                ps.setObject(i+1, args[i]);
            }
            
            //获得数据集和元数据集
            res = ps.executeQuery();
            ResultSetMetaData rsmd = res.getMetaData();
            int col = rsmd.getColumnCount();
            
            ArrayList<T> list = new ArrayList<T>();
            while(res.next()) {
                T t = clazz.newInstance();
                for(int i=0;i<col;i++) {
                    Object value = res.getObject(i+1);          //要获得的数据值
                    String colLabel = rsmd.getColumnLabel(i+1);    //要获得的元数据名称
                    
                    //通过反射给t对象指定的colName属性赋值为value
                    Field field = clazz.getDeclaredField(colLabel);
                    field.setAccessible(true);
                    field.set(t,value);
                }
                
                list.add(t);
            }
            System.out.println("执行成功");
            return list;
        }
        catch(Exception ex) {
            ex.printStackTrace();
        }
        finally {
            JDBCUtils.closeResource(null, ps, res);
        }

        return null;
    }

通用修改函数

//通用增删改,参数为预编译的sql,和可变形参args用来充当占位符 --可处理事物版本
    public static int update(Connection con,String sql,Object ...args) {
        PreparedStatement ps=null;
        try {
            //1.获取连接
            con=JDBCUtils.getConnection();
            //2.预编译sql,返回ps实例
            ps=con.prepareStatement(sql);
            //填充占位符,sql中的占位符个数=args数组长度
            for(int i=0;i<args.length;i++) {
                ps.setObject(i+1, args[i]);
            }
            //4.执行, excute()方法如果执行查询操作,则此方法返回true,如果执行增删改,则返回false
            //ps.execute();
            return ps.executeUpdate();
        }
        catch (Exception ex) {
            ex.printStackTrace();
        }
        finally {
            //5.关闭资源
            JDBCUtils.closeResource(null, ps);
        }
        return 0;
    }
    

 

jdbc 可处理事物的通用增删查改函数

标签:ext   result   增删改   泛型   机制   --   编译   trace   return   

原文地址:https://www.cnblogs.com/zsben991126/p/11853451.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!