日期:2014-05-16  浏览次数:20541 次

实用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;
    }