正文

進(jìn)銷存管理系統(tǒng)(9)

Java項目開發(fā)案例全程實錄(第2版) 作者:明日科技


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;

}


上一章目錄下一章

Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號