关于程序执行效率(数组,list)

         第一个项目,只考虑了逻辑方面的问题,而忽略了效率,原因是访问数据库过于频繁。。。

        逻辑写完后,试用数组还有list对程序进行了优化。。。基本思想是试用数组还有list存放数据库中的数据,然后遍历数组还有list得到所需要的,效率当然大增。。。

 

        用数组存放某个字段。。。

  1. public static String[] findYue() {
  2.         ResultSet rs = null;
  3.         DBConn db = null;
  4.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
  5.         String[] yue = new String[1000];
  6.         int i = 0;
  7.         try {
  8.             db = new DBConn();
  9.             String hqlStr = "select B2 from XXX order by B2 ASC";//按日期顺序排列可以避免存入日期重复
  10.             rs = db.executeQuery(hqlStr);
  11.             while (rs.next()) {
  12.                 if (i == 0) {
  13.                     yue[0] = sdf.format(rs.getDate(1));
  14.                     i++;
  15.                 } else if (i > 0
  16.                         && !yue[i - 1].equals(sdf.format(rs.getDate(1)))) {
  17.                     yue[i] = sdf.format(rs.getDate(1));
  18.                     i++;
  19.                 }
  20.             }
  21.         } catch (SQLException sqle) {
  22.             sqle.printStackTrace();
  23.         } catch (Exception e) {
  24.             e.printStackTrace();
  25.         } finally {
  26.             try {
  27.                 db.close();
  28.             } catch (Exception e) {
  29.                 e.printStackTrace();
  30.             }
  31.         }
  32.         return yue;
  33.     }

        当然以上采用静态数组不是太好,一般试用动态数组。。。

 

  1. public static List findDT() {
  2.         ResultSet rs = null;
  3.         DBConn db = null;
  4.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
  5.         List<String> list = new ArrayList<String>();
  6.         int i = 0;
  7.         try {
  8.             db = new DBConn();
  9.             String hqlStr = "select B2 from XXX order by B2 ASC";//按日期顺序排列可以避免存入日期重复
  10.             rs = db.executeQuery(hqlStr);
  11.             while (rs.next()) {
  12.                 if (i == 0) {
  13.                     list.add(sdf.format(rs.getDate(1)));
  14.                     i++;
  15.                 } 
  16.                 else if (i > 0 && !list.get(i-1).equals(sdf.format(rs.getDate(1)))) {
  17.                             list.add(sdf.format(rs.getDate(1)));
  18.                             i++;
  19.                 }
  20.             }
  21.         } catch (SQLException sqle) {
  22.             sqle.printStackTrace();
  23.         } catch (Exception e) {
  24.             e.printStackTrace();
  25.         } finally {
  26.             try {
  27.                 db.close();
  28.             } catch (Exception e) {
  29.                 e.printStackTrace();
  30.             }
  31.         }
  32.         return list;
  33.     }

        list存放BEAN,BEAN存放所有数据。。。

  1. public static SjbdBean[] findSjbd(Session session) {
  2.         Collection list = new ArrayList();
  3.         Transaction tx = null;
  4.         ZYyfxSjbd obj = null;
  5.         SjbdBean sjb = new SjbdBean();
  6.         try {
  7.             tx = session.beginTransaction();
  8.             StringBuffer hqlStr = new StringBuffer(
  9.                     " from XXX d where 1=1 order by B1 ASC");
  10.             Query qry = session.createQuery(hqlStr.toString());
  11.             Iterator it = qry.list().iterator();
  12.             while (it.hasNext()) {
  13.                 obj = (ZYyfxSjbd) it.next();
  14.                 sjb.setB1(obj.getB1());
  15.                 sjb.setB2(obj.getB2());
  16.                 sjb.setB5(obj.getB5());
  17.                 sjb.setB9(obj.getB9());
  18.                 sjb.setB10(obj.getB10());
  19.                 sjb.setB11(obj.getB11());
  20.                 sjb.setB12(obj.getB12());
  21.                 sjb.setB13(obj.getB13());
  22.                 sjb.setB14(obj.getB14());
  23.                 sjb.setB25(obj.getB25());
  24.                 sjb.setB26(obj.getB26());
  25.                 sjb.setB44(obj.getB44());
  26.                 sjb.setB46(obj.getB46());
  27.                 sjb.setB49(obj.getB49());
  28.                 sjb.setB50(obj.getB50());
  29.                 sjb.setB29(obj.getB29());
  30.                 sjb.setB30(obj.getB30());
  31.                 sjb.setB31(obj.getB31());
  32.                 sjb.setB32(obj.getB32());
  33.                 sjb.setB78(obj.getB78());
  34.                 list.add(sjb);
  35.                 sjb = new SjbdBean(); // 解决覆盖问题
  36.             }
  37.         } catch (Exception e) {
  38.             if (tx != null) {
  39.                 try {
  40.                     tx.rollback();
  41.                 } catch (HibernateException ex) {
  42.                     ex.printStackTrace();
  43.                 }
  44.             }
  45.             e.printStackTrace();
  46.             return null;
  47.         }
  48.         return (SjbdBean[]) list.toArray(new SjbdBean[0]);
  49.     }
  50.  //测试findSjbd()
  51.          Session session = SessionManager.currentSession();
  52.          SjbdBean[] a = findSjbd(session);
  53.          for(int i=0;i<=a.length-1;i++){
  54.          System.out.println(a[i].getB1()+"  "+a[i].getB2()+"  "+a[i].getB9());
  55.          } 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值