Java对代码表的处理技巧
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lavasoft.blog.51cto.com/62575/62716 |
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 = "\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 != null) try { stmt.close(); } catch (SQLException e) { log.error("关闭数据库Statement对象失败!"); e.printStackTrace(); } if (conn != null) try { 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 欢迎留言交流。
本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/62716 本文出自 51CTO.COM技术博客 |



leizhimin
博客统计信息
热门文章
最新评论
友情链接