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


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

    通用查询函数

    //使用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;
        }
        

     关于聚合函数的查询

    //用来处理聚合函数等只返回一个值的sql语句
        public <E>E getValue(Connection con,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();
                if(res.next())
                    return (E)res.getObject(1);
            }
            catch(Exception ex) {
                ex.printStackTrace();
            }
            finally {
                JDBCUtils.closeResource(null, ps, res);
            }
            return null;
        }
  • 相关阅读:
    .NET Core微服务之基于Consul实现服务治理
    在 .NET 4.5 中反射机制的变更
    C#使用Emit构造拦截器动态代理类
    C#使用Emit生成构造函数和属性
    秒懂C#通过Emit动态生成代码
    C# 高性能 TCP 服务的多种实现方式
    Zookeeper的功能以及工作原理
    Eclipse智能提示及快捷键
    【Maven】Select Dependency 无法检索
    springboot的三种启动方式
  • 原文地址:https://www.cnblogs.com/zsben991126/p/11853451.html
Copyright © 2020-2023  润新知