1.6 公共模塊設(shè)計
在本系統(tǒng)的項目空間中,有部分模塊(或者是多個模塊甚至整個系統(tǒng)的配置信息)是公用的,它們被多個模塊重復(fù)調(diào)用完成指定的業(yè)務(wù)邏輯,本節(jié)將這些公共模塊提出來加以單獨介紹。
1.6.1 編寫Dao公共類
Dao類主要負(fù)責(zé)有關(guān)數(shù)據(jù)庫的操作,該類在靜態(tài)代碼段中驅(qū)動并連接數(shù)據(jù)庫,然后將所有的數(shù)據(jù)庫訪問方法定義為靜態(tài)的。本節(jié)將介紹Dao類中有關(guān)數(shù)據(jù)庫操作的關(guān)鍵方法。Dao類的定義代碼如下:
例程09 代碼位置:光盤\TM\01\JXCManager\src\com\lzw\dao\Dao.java
public class Dao {
protected static String dbClassName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
protected static String dbUrl = "jdbc:microsoft:sqlserver://localhost:1433;"
+ "DatabaseName=db_JXC;SelectMethod=Cursor";
protected static String dbUser = "sa";
protected static String dbPwd = "";
protected static String second = null;
public static Connection conn = null;
static {
try {
if (conn == null) {
Class.forName(dbClassName).newInstance(); //加載數(shù)據(jù)庫驅(qū)動類
conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd); //獲取數(shù)據(jù)庫連接
}
} catch (Exception ee) {
ee.printStackTrace();
}
}
}
代碼貼士
dbClassName:該成員變量用于定義數(shù)據(jù)庫驅(qū)動類的名稱。
dbUrl:該成員變量用于定義訪問數(shù)據(jù)庫的URL路徑。
dbUser:該成員變量用于定義訪問數(shù)據(jù)庫的用戶名稱。
dbPwd:該成員變量用于定義訪問數(shù)據(jù)庫的用戶密碼。
conn:該成員變量用于定義連接數(shù)據(jù)庫的對象。
1.a(chǎn)ddGys()方法
該方法用于添加供應(yīng)商的基礎(chǔ)信息,它接收供應(yīng)商的實體類TbGysinfo作方法的參數(shù),然后把實體對象中的所有屬性存入供應(yīng)商數(shù)據(jù)表中。關(guān)鍵代碼如下:
例程10 代碼位置:光盤\TM\01\JXCManager\src\com\lzw\dao\Dao.java
//添加供應(yīng)商信息的方法
public static boolean addGys(TbGysinfo gysInfo) {
if (gysInfo == null) //如果供應(yīng)商實體對象為空
return false; //則返回false
return insert("insert tb_gysinfo values('" + gysInfo.getId() + "','" //執(zhí)行供應(yīng)商添加
+ gysInfo.getName() + "','" + gysInfo.getJc() + "','"
+ gysInfo.getAddress() + "','" + gysInfo.getBianma() + "','"
+ gysInfo.getTel() + "','" + gysInfo.getFax() + "','"
+ gysInfo.getLian() + "','" + gysInfo.getLtel() + "','"
+ gysInfo.getMail() + "','" + gysInfo.getYh() + "')");
}
2.getGysInfo()方法
該方法將根據(jù)Item對象中封裝的供應(yīng)商ID編號和供應(yīng)商名稱獲取指定供應(yīng)商的數(shù)據(jù),并將該供應(yīng)商的數(shù)據(jù)封裝到實體對象中,然后返回該實體對象。關(guān)鍵代碼如下:
例程11 代碼位置:光盤\TM\01\JXCManager\src\com\lzw\dao\Dao.java
//讀取指定供應(yīng)商信息
public static TbGysinfo getGysInfo(Item item) {
String where = "name='" + item.getName() + "' "; //默認(rèn)的查詢條件以供應(yīng)商名稱為主
if (item.getId() != null) //如果Item對象中存有ID編號
where = "id='" + item.getId() + "' "; //則以ID編號為查詢條件
TbGysinfo info = new TbGysinfo();
ResultSet set = findForResultSet("select * from tb_gysinfo where "+ where);
try {
if (set.next()) {
info.setId(set.getString("id").trim()); //封裝供應(yīng)商數(shù)據(jù)到實體對象中
info.setAddress(set.getString("address").trim());
info.setBianma(set.getString("bianma").trim());
info.setFax(set.getString("fax").trim());
info.setJc(set.getString("jc").trim());
info.setLian(set.getString("lian").trim());
info.setLtel(set.getString("ltel").trim());
info.setMail(set.getString("mail").trim());
info.setName(set.getString("name").trim());
info.setTel(set.getString("tel").trim());
info.setYh(set.getString("yh").trim());
}
} catch (SQLException e) {
e.printStackTrace();
}
return info; //返回供應(yīng)商實體對象
}
3.updateGys()方法
該方法用于更新供應(yīng)商的基礎(chǔ)信息,它接收供應(yīng)商的實體類TbGysinfo作方法參數(shù),在方法中直接解析供應(yīng)商實體對象中的屬性,并將這些屬性更新到數(shù)據(jù)表中。關(guān)鍵代碼如下:
例程12 代碼位置:光盤\TM\01\JXCManager\src\com\lzw\dao\Dao.java
//修改供應(yīng)商信息的方法
public static int updateGys(TbGysinfo gysInfo) {
return update("update tb_gysinfo set jc='" + gysInfo.getJc()
+ "',address='" + gysInfo.getAddress() + "',bianma='"
+ gysInfo.getBianma() + "',tel='" + gysInfo.getTel()
+ "',fax='" + gysInfo.getFax() + "',lian='" + gysInfo.getLian()
+ "',ltel='" + gysInfo.getLtel() + "',mail='"
+ gysInfo.getMail() + "',yh='" + gysInfo.getYh()
+ "' where id='" + gysInfo.getId() + "'");
}
4.insertRukuInfo()方法
該方法負(fù)責(zé)完成入庫單信息的添加,涉及到庫存表、入庫主表和入庫詳細(xì)表等多個數(shù)據(jù)表的操作。為保證數(shù)據(jù)的完整性,該方法將入庫信息的添加操作放在事務(wù)中完成,方法將接收入庫主表的實體類TbRukuMain作參數(shù),該實體類中包含了入庫詳細(xì)表的引用。關(guān)鍵代碼如下:
例程13 代碼位置:光盤\TM\01\JXCManager\src\com\lzw\dao\Dao.java
public static boolean insertRukuInfo(TbRukuMain ruMain) { //在事務(wù)中添加入庫信息
try {
boolean autoCommit = conn.getAutoCommit();
conn.setAutoCommit(false); //取消自動提交模式
insert("insert into tb_ruku_main values('" + ruMain.getRkId() //添加入庫主表記錄
+ "','" + ruMain.getPzs() + "'," + ruMain.getJe() + ",'"
+ ruMain.getYsjl() + "','" + ruMain.getGysname() + "','"
+ ruMain.getRkdate() + "','" + ruMain.getCzy() + "','"
+ ruMain.getJsr() + "','" + ruMain.getJsfs() + "')");
Set<TbRukuDetail> rkDetails = ruMain.getTabRukuDetails();
for (Iterator<TbRukuDetail> iter = rkDetails.iterator(); iter.hasNext();) {
TbRukuDetail details = iter.next();
insert("insert into tb_ruku_detail values('" + ruMain.getRkId() //添加入庫詳細(xì)表記錄
+ "','" + details.getTabSpinfo() + "'," + details.getDj() + "," + details.getSl() + ")");
Item item = new Item();
item.setId(details.getTabSpinfo());
TbSpinfo spInfo = getSpInfo(item);
if (spInfo.getId() != null && !spInfo.getId().isEmpty()) {
TbKucun kucun = getKucun(item);
if (kucun.getId() == null || kucun.getId().isEmpty()) { //添加或修改庫存表記錄
insert("insert into tb_kucun values('" + spInfo.getId()
+ "','" + spInfo.getSpname() + "','"+ spInfo.getJc() + "','" + spInfo.getCd()
+ "','" + spInfo.getGg() + "','"+ spInfo.getBz() + "','" + spInfo.getDw()
+ "'," + details.getDj() + ","+ details.getSl() + ")");
} else {
int sl = kucun.getKcsl() + details.getSl();
update("update tb_kucun set kcsl=" + sl + ",dj="+ details.getDj() + " where id='"+ kucun.getId() + "'");
}
}
}
conn.commit(); //提交事務(wù)
conn.setAutoCommit(autoCommit); //恢復(fù)自動提交模式
} catch (SQLException e) {
try {
conn.rollback(); //如果出錯,回退事務(wù)
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
return true;
}