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;
}