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

Posted zsbenn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
    }
    

 

以上是关于jdbc 可处理事物的通用增删查改函数的主要内容,如果未能解决你的问题,请参考以下文章

jdbc-mysql基础 增删查改 简单示例

JDBC课程4--使用PreparedStatement进行增删查改, JDBCTools新增对应的的功能,模拟SQL注入

c++中的顺序表写法,主要实现(增删查改,构造函数,运算符重载)

JDBC终章- 使用 DBUtils实现增删查改- C3P0Utils数据源/QueryRunner runner连接数据源并执行sql

前端Vue+Element UI案例:通用后台管理系统-用户管理:Table表格增删查改Pagination分页搜索框

数据库的增删查改