• Java对代码表的处理技巧


    Java对代码表的处理技巧

    在Java中应用系统中,常常会有很多的代码表要处理,这些处理需求主要表现在通过代码获取名称,获取该代码的其他信息,如果每次都通过查询数据库来处理,是必消耗大量的资源,速度也慢,因为每次连接连接数据库要付出的代价是高昂的。
    那如何解决上面这些问题呢?我们可以考虑使用Java对象的缓存技术来实现,即,将代码表以对象的方式存储起来,最容易考虑到的就是Map对象,Map的key用来存放代码,value用来存放代码对象,这样,就可以通过代码方便获取代码表的各种信息。
    另外代码表工具类是是不需要创建对象和被继承的,只需要通过类名获取代码初始化的时候所填充的Map对象即可。因此定义类的时候类名应该被final修饰,默认构造方法应该是private的,其他工具方法应该是public static的,还应该有个static代码块,在类加载的时候初始化代码表。

    下面给出个例子:假设有个期别代码表,期别代码表包含三个属性:代码、名称类型。我现在就要实现一个期别代码表工具类,来展示上面的处理思想。
     
    /**
    * 期别代码Bean
    * File: StageBean.java
    * User: leizhimin
    * Date: 2008-2-22 9:33:30
    */

    public class StageBean {
        private String code;    //代码
        private String name;    //名称
        private String type;    //类型

        public String getCode() {
            return code;
        }

        public void setCode(String code) {
            this.code = code;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }
    }
     
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import com.topsoft.icisrpt.common.beans.StageBean;
    import com.topsoft.icisrpt.common.util.DBUtil;

    import java.util.Map;
    import java.util.HashMap;
    import java.sql.Connection;
    import java.sql.Statement;
    import java.sql.ResultSet;
    import java.sql.SQLException;

    /**
    * 期别代码工具类
    * File: StageCode.java
    * User: leizhimin
    * Date: 2008-2-22 9:35:43
    */

    public final class StageCode {
        private static final Log log = LogFactory.getLog(StageCode.class);
        private static Map<String, StageBean> codeMap = new HashMap<String, StageBean>();
        private static boolean isLoad = false;
        private static final String sql = " " +
                "SELECT DM,MC,LX FROM RPT.DM_BBQB";

        static {
            reLoad();
        }

        /**
         * 私有构造方法,禁止创建对象
         */

        private StageCode() {
        }

        /**
         * 重新加载期别代码
         *
         * @return boolean
         */

        public static boolean reLoad() {
            boolean flag = false;
            Connection conn = DBUtil.makeConnection();
            Statement stmt = null;
            try {
                stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.CLOSE_CURSORS_AT_COMMIT);
                ResultSet rs = stmt.executeQuery(sql);
                while (rs.next()) {
                    StageBean stageBean = new StageBean();
                    stageBean.setCode(rs.getString("DM"));
                    stageBean.setName(rs.getString("MC"));
                    stageBean.setType(rs.getString("LX"));
                    codeMap.put(stageBean.getCode(), stageBean);
                }
                isLoad = true;
                flag = true;
            } catch (SQLException e) {
                log.error("载入期别代码表发生异常!");
                e.printStackTrace();
            } finally {
                if (stmt != nulltry {
                    stmt.close();
                } catch (SQLException e) {
                    log.error("关闭数据库Statement对象失败!");
                    e.printStackTrace();
                }
                if (conn != nulltry {
                    conn.close();
                } catch (SQLException e) {
                    log.error("关闭数据库连接失败!");
                    e.printStackTrace();
                }
            }
            log.info("加载期别代码表" + (flag ? "成功!" : "失败!"));
            return flag;
        }

        /**
         * 获取期别代码表
         *
         * @return Map<String, StageBean>
         */

        public static Map<String, StageBean> getCodeMap() {
            return codeMap;
        }

        /**
         * 判断期别代码表是否已经载入
         *
         * @return boolean
         */

        public static boolean isLoad() {
            return isLoad;
        }

        /**
         * 获取查询期别代码表的SQL
         *
         * @return String
         */

        public static String getSql() {
            return sql;
        }
    }
     
    import java.util.Map;
    import java.util.Collection;
    import java.util.Iterator;

    /**
    * 模拟客户端测试类
    * File: TestStageCode.java
    * User: leizhimin
    * Date: 2008-2-22 9:40:29
    */

    public class TestStageCode {
        public static void main(String args[]) {
            Map<String, StageBean> codeMap = StageCode.getCodeMap();
            Collection<StageBean> col = codeMap.values();
            System.out.println("查询的SQL代码为:" + StageCode.getSql());
            System.out.println("------------------");
            System.out.println("下面是查询到代码表内容:");
            for (Iterator it = col.iterator(); it.hasNext();) {
                StageBean bean = (StageBean) it.next();
                System.out.println(bean.getCode() + " —— " + bean.getName() + " —— " + bean.getType());
            }
        }
    }
     
    运行结果:
    查询的SQL代码为:
    SELECT DM,MC,LX FROM RPT.DM_BBQB
    ------------------
    下面是查询到代码表内容:
    D —— 冬季 季报 —— J
    01 —— 01月 月报 —— Y
    07 —— 07月 月报 —— Y
    C —— 春季 季报 —— J
    02 —— 02月 月报 —— Y
    B —— 下半年 年报 —— B
    Q —— 秋季 季报 —— J
    06 —— 06月 月报 —— Y
    03 —— 03月 月报 —— Y
    10 —— 10月 月报 —— Y
    04 —— 04月 月报 —— Y
    05 —— 05月 月报 —— Y
    A —— 上半年 年报 —— B
    11 —— 11月 月报 —— Y
    09 —— 09月 月报 —— Y
    N —— 年报 —— N
    12 —— 12月 月报 —— Y
    08 —— 08月 月报 —— Y
    X —— 夏季 季报 —— J

    Process finished with exit code 0
     
  • 相关阅读:
    php中读写excel表格文件示例。
    php中的常用数组函数(八) 排序函数汇总(sort、rsort、usort、asort、uasort、arsort、ksort、uksort、krsort、natsort、natcasesort、array_multisort)
    php中的常用数组函数(七) 数组合并 array_merge()和array_merge_recursive()
    随机显示广告图片
    缩放图片到合适的大小
    鼠标经过图片放大归纳
    Windows环境下搭建Linux虚拟机
    CSS实现特殊效果
    MySQL基础操作(一)
    vue.js(二)
  • 原文地址:https://www.cnblogs.com/liudianjia/p/12545192.html
Copyright © 2020-2023  润新知