一个项目思路(0):DButil的抽象写法

这个是我老师写的(根据他写的,想到了后面的思路):

private static ComboPooledDataSource dataSource;//这里是用c3p0创建连接池
    static
    {
        try
        {
            ResourceBundle bundle = ResourceBundle.getBundle("config/database/db");
            bundle = ResourceBundle.getBundle("config/database/"+bundle.getString("dbfile"));
            dataSource = new ComboPooledDataSource();
            dataSource.setDriverClass(bundle.getString("driverClass"));
            dataSource.setJdbcUrl(bundle.getString("jdbcUrl"));
            dataSource.setUser(bundle.getString("user"));
            dataSource.setPassword(bundle.getString("password"));
            dataSource.setMaxPoolSize(Integer.parseInt(bundle.getString("maxPoolSize")));
            dataSource.setMinPoolSize(Integer.parseInt(bundle.getString("minPoolSize")));
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    public static boolean cud(String sql,List<Object> params)//增删改
    {
        boolean flag = false;
//        Statement stat = null;
        Connection conn = null;
        PreparedStatement pstat = null;
        try
        {
            //创建语句对象
            //stat = conn.createStatement();
            conn = dataSource.getConnection();
            pstat = conn.prepareStatement(sql);
            if(params!=null)
            {
                for(int i=1;i<=params.size();i++)
                {
                    pstat.setObject(i, params.get(i-1));
                }
            }
            
        //    int result = stat.executeUpdate(sql);
            int result = pstat.executeUpdate();
            if(result>0) flag = true;
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            close(null,pstat,conn);
        }
        
        return flag;
    }
   
    
    public static List<Object> find(String sql,List<Object> params,Object po)//查找,这里用到的反射机制是后面思路的核心
    {
        List<Object> objList = new ArrayList<Object>();
        PreparedStatement pstat = null;
        Connection conn = null;
        ResultSet rs = null;
        try
        {
            conn = dataSource.getConnection();
            pstat = conn.prepareStatement(sql);
            
            if(params!=null)
            {
                for(int i=1;i<=params.size();i++)
                {
                    pstat.setObject(i, params.get(i-1));
                }
            }
            
            rs = pstat.executeQuery();
            
            /*******把rs封装到对象中************/
            
            //取得ResultSet的列名
            ResultSetMetaData rsmd = rs.getMetaData();
            int columnsCount = rsmd.getColumnCount();
            String[] columnNames = new String[columnsCount];
            for (int i = 0; i < columnsCount; i++) {
                columnNames[i] = rsmd.getColumnLabel(i + 1);
            }
            
            //取得Method方法 //反射
            Method[] methods = po.getClass().getMethods();
            String setMethodName = "";
             //遍历ResultSet
            while (rs.next()) {
                po = po.getClass().newInstance();
                //反射, 从ResultSet绑定到JavaBean
                for(int i = 0; i < columnNames.length; i++) {
                    //取得Set方法
                    setMethodName = "set" + columnNames[i];
                    //遍历Method
                    for (int j = 0; j < methods.length; j++) {
                        if (methods[j].getName().equalsIgnoreCase(setMethodName)) {
                            setMethodName = methods[j].getName();
                            Object value = rs.getObject(columnNames[i]);
                           if(value!=null)
                           {
                            //执行Set方法
                            try
                            {
                                //JavaBean内部属性和ResultSet中一致时候
                                
                                Method setMethod = null;
                                if(value.getClass()==java.sql.Date.class)
                                {
                                    setMethod = po.getClass().getMethod(setMethodName, Date.class);
                                    Date Value=new Date(((java.sql.Date)value).getTime());//在取出时,直接把date类型sql 转换成 util
                                    setMethod.invoke(po, Value);
                                }
                                else
                                {
                                    setMethod = po.getClass().getMethod(setMethodName, value.getClass());
                                    setMethod.invoke(po, value);
                                }                                
                                
                            }
                            catch (Exception e)
                            {
                                //System.out.println("数据库数据"+value.toString()+"类型是:"+value.getClass());
                                //JavaBean内部属性和ResultSet中不一致时候,使用String来输入值
                                Method setMethod = po.getClass().getMethod(setMethodName, String.class);
                                setMethod.invoke(po, value);
                            }
                           }
                        }
                    }
                }
                objList.add(po);
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            close(null,pstat,conn);
        }
        return objList;
    }
    
    private static void close(ResultSet rs,PreparedStatement pstat,Connection conn)
    {
        try
        {
            if(rs!=null)rs.close();
            if(pstat!=null)pstat.close();
            if(conn!=null)conn.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 对于数据表的读操作 他可以把结果转换成List Array Set等java集合 便于程序员操作; 2 对于数据表的操作 也变得很简单(只需sql语句) 3 可以使用数据源 使用JNDI 数据库连接池等技术来优化性能 重用已经构建好的数据库连接对象 而不像php asp那样 费时费力的不断重复的构建和析构这样的对象 DBUtils包括3个包: org apache commons dbutils org apache commons dbutils handlers org apache commons dbutils wrappers DBUtils封装了对JDBC的操作 简化了JDBC操作 可以少代码 org apache commons dbutils DbUtils 关闭链接等操作 QueryRunner 进行查询的操作 org apache commons dbutils handlers ArrayHandler :将ResultSet中第一行的数据转化成对象数组 ArrayListHandler将ResultSet中所有的数据转化成List List中存放的是Object[] BeanHandler :将ResultSet中第一行的数据转化成类对象 BeanListHandler :将ResultSet中所有的数据转化成List List中存放的是类对象 ColumnListHandler :将ResultSet中某一列的数据存成List List中存放的是Object对象 KeyedHandler :将ResultSet中存成映射 key为某一列对应为Map Map中存放的是数据 MapHandler :将ResultSet中第一行的数据存成Map映射 MapListHandler :将ResultSet中所有的数据存成List List中存放的是Map ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object org apache commons dbutils wrappers SqlNullCheckedResultSet :对ResultSet进行操作 改版里面的值 StringTrimmedResultSet :去除ResultSet中中字段的左右空格 Trim ">1 对于数据表的读操作 他可以把结果转换成List Array Set等java集合 便于程序员操作; 2 对于数据表的操作 也变得很简单(只需sql语句) 3 可以使用数据源 使用JNDI 数据库连接池等技术来优化性能 重用已经构建好的 [更多]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值