Java对代码表的处理技巧

  1. 云栖社区>
  2. 博客>
  3. 正文

Java对代码表的处理技巧

技术小阿哥 2017-10-18 11:28:00 浏览560
展开阅读全文
在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 = "\n" + 
            "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
 
欢迎留言交流。
 本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/62716,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
技术小阿哥
+ 关注