首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

适用JDBC数据库查询封装

2012-10-08 
实用JDBC数据库查询封装很实用的封装,适用于仅使用JDBC操作数据库的时候。查询数据库后直接封装javabean对

实用JDBC数据库查询封装
很实用的封装,适用于仅使用JDBC操作数据库的时候。查询数据库后直接封装javabean对象到集合中,免去了繁琐的迭代每条记录然后逐个取字段封装javaBean.

  当然是存在很多的不方便的地方的,比如数据库字段名和javabean属性名需要一致的情况下才能被封装到javabean中, 以下代码中也还缺少判断javabean中的属性是否对应在数据库查询中存在, 但是这个看看API就可以当场搞定的事情。不再废话

 public static List queryList(String preSql, String className,            Connection con, int offset, int pagelength) throws PortalException    {                List beanbasket = new ArrayList();        String[] columns = null;                if (con == null)        {            con = getConnection();        }        //查询出的结果集        ResultSet rs = null;        PreparedStatement pstmt = null;        try        {            pstmt = con.prepareStatement(preSql);            if (pagelength != 0)            {                int endnum = offset+pagelength;                int stratnum = offset+1;                pstmt.setInt(1, endnum);                 pstmt.setInt(2, stratnum);             }            LogFactory.debug("will query the data!!");            rs = pstmt.executeQuery();            LogFactory.debug("query the data success!!!");                        ResultSetMetaData metedata = rs.getMetaData();            //获取查询出的字段总数int i = metedata.getColumnCount();//获取数据库表中所有的字段名columns = new String[i];for (int j = 1; j < i+1; j++) { columns[j-1] = metedata.getColumnName(j);}                        Class clazz = Class.forName(className);            Field[] fields = clazz.getDeclaredFields();                        LogFactory.debug("the fields length is:"                    + fields.length);            while (rs.next())            {                Object obj = clazz.newInstance();                for (Field f : fields)                {                //如果该字段在数据库中有存储                if(isContainField(f.getName(),columns)){                                    f.setAccessible(true);                    String strType = f.getType().toString();                    if (strType.indexOf("Long") != -1)                    {                        f.set(obj, rs.getLong(f.getName()));                    }                    else if (strType.indexOf("Integer") != -1                            || strType.indexOf("int") != -1)                    {                        f.set(obj, rs.getInt(f.getName()));                    }                    else if (strType.indexOf("String") != -1)                    {                        String s = rs.getString(f.getName());                       if(s!=null&&!s.equals("null"))                       {                            s =s.trim();                       }                       else                       {                           s = "";                       }                       f.set(obj, s);                    }                    else if (strType.indexOf("Date") != -1)                    {                        f.set(obj, rs.getDate(f.getName()));                    }                    else if (strType.indexOf("Double") != -1)                    {                        f.set(obj, rs.getDouble(f.getName()));                    }                    else if (strType.indexOf("Float") != -1)                    {                        f.set(obj, rs.getFloat(f.getName()));                    }                    else                    {                        LogFactory.debug(                                 "this data type not support yet!");                        LogFactory.debug("this date type is"                                + f.getName());                                           }                                }                beanbasket.add(obj);            }        }              catch (Exception ex)        {        }                LogFactory.info("Exit DBProxy.querylist()");        return beanbasket;    }

热点排行