正文

进销存管理系统(9)

Java项目开发案例全程实录(第2版) 作者:明日科技


1.6 公共模块设计

在本系统的项目空间中,有部分模块(或者是多个模块甚至整个系统的配置信息)是公用的,它们被多个模块重复调用完成指定的业务逻辑,本节将这些公共模块提出来加以单独介绍。

1.6.1 编写Dao公共类

Dao类主要负责有关数据库的操作,该类在静态代码段中驱动并连接数据库,然后将所有的数据库访问方法定义为静态的。本节将介绍Dao类中有关数据库操作的关键方法。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(); //加载数据库驱动类

conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd); //获取数据库连接

}

} catch (Exception ee) {

ee.printStackTrace();

}

}

}

代码贴士

dbClassName:该成员变量用于定义数据库驱动类的名称。

dbUrl:该成员变量用于定义访问数据库的URL路径。

dbUser:该成员变量用于定义访问数据库的用户名称。

dbPwd:该成员变量用于定义访问数据库的用户密码。

conn:该成员变量用于定义连接数据库的对象。

1.addGys()方法

该方法用于添加供应商的基础信息,它接收供应商的实体类TbGysinfo作方法的参数,然后把实体对象中的所有属性存入供应商数据表中。关键代码如下:

例程10 代码位置:光盘\TM\01\JXCManager\src\com\lzw\dao\Dao.java

//添加供应商信息的方法

public static boolean addGys(TbGysinfo gysInfo) {

if (gysInfo == null) //如果供应商实体对象为空

return false; //则返回false

return insert("insert tb_gysinfo values('" + gysInfo.getId() + "','" //执行供应商添加

+ gysInfo.getName() + "','" + gysInfo.getJc() + "','"

+ gysInfo.getAddress() + "','" + gysInfo.getBianma() + "','"

+ gysInfo.getTel() + "','" + gysInfo.getFax() + "','"

+ gysInfo.getLian() + "','" + gysInfo.getLtel() + "','"

+ gysInfo.getMail() + "','" + gysInfo.getYh() + "')");

}

2.getGysInfo()方法

该方法将根据Item对象中封装的供应商ID编号和供应商名称获取指定供应商的数据,并将该供应商的数据封装到实体对象中,然后返回该实体对象。关键代码如下:

例程11 代码位置:光盘\TM\01\JXCManager\src\com\lzw\dao\Dao.java

//读取指定供应商信息

public static TbGysinfo getGysInfo(Item item) {

String where = "name='" + item.getName() + "' "; //默认的查询条件以供应商名称为主

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()); //封装供应商数据到实体对象中

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; //返回供应商实体对象

}

3.updateGys()方法

该方法用于更新供应商的基础信息,它接收供应商的实体类TbGysinfo作方法参数,在方法中直接解析供应商实体对象中的属性,并将这些属性更新到数据表中。关键代码如下:

例程12 代码位置:光盘\TM\01\JXCManager\src\com\lzw\dao\Dao.java

//修改供应商信息的方法

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()方法

该方法负责完成入库单信息的添加,涉及到库存表、入库主表和入库详细表等多个数据表的操作。为保证数据的完整性,该方法将入库信息的添加操作放在事务中完成,方法将接收入库主表的实体类TbRukuMain作参数,该实体类中包含了入库详细表的引用。关键代码如下:

例程13 代码位置:光盘\TM\01\JXCManager\src\com\lzw\dao\Dao.java

public static boolean insertRukuInfo(TbRukuMain ruMain) { //在事务中添加入库信息

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() //添加入库详细表记录

+ "','" + 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(); //提交事务

conn.setAutoCommit(autoCommit); //恢复自动提交模式

} catch (SQLException e) {

try {

conn.rollback(); //如果出错,回退事务

} catch (SQLException e1) {

e1.printStackTrace();

}

e.printStackTrace();

}

return true;

}


上一章目录下一章

Copyright © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号