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
歡迎留言交流。
相關文章
相關標籤/搜索