Web Technology 解耦合实例—一数据库连接过程与主体分离(4/6) public class DBHelper t public static Connection getconn({//从连接池获取 连接} public static void release Conn( Connection conn //把使用完的数据库连接返回池中} public double calcAmount(String id, double amount) Connection conn s null tricon= DBHelper: getConno/程序主体} catch (i] finally(DBHelper release Conn( conn;1
Web Technology 解耦合实例——数据库连接过程与主体分离(4/6) public class DBHelper { public static Connection getConn() {//从连接池获取 连接} public static void releaseConn( Connection conn ) {//把使用完的数据库连接返回池中} } public double calcAmount(String id, double amount) { Connection conn = null; try{conn = DBHelper.getConn();//程序主体…} catch(…){…} finally{DBHelper.releaseConn( conn );} }
Web Technology 解耦合实例——业务逻辑与DB访问未分离(5/6) public double calcAmount(string id, double amount Connection conn DBHelper getcConn O; /获得客户等级 Preparedstatement stmt cust conn prepare Statement(' SELECT LEVEL FROM CUSTOMER WHERE ID=2); stmt_ cust setstring (1, idi Resultset rset_cust stmt_ cust executeQuery oi if rset_cust.nexto)t int cust_lvl=rset_cust. getInt(1);
Web Technology 解耦合实例——业务逻辑与DB访问未分离(5/6) public double calcAmount(String id, double amount) { Connection conn = DBHelper.getConn(); //获得客户等级 PreparedStatement stmt_cust = conn.prepareStatement(“SELECT LEVEL FROM CUSTOMER WHERE ID = ?”); stmt_cust.setString(1, id); ResultSet rset_cust = stmt_cust.executeQuery(); if ( rset_cust.next() ) { int cust_lvl = rset_cust.getInt(1);
Web Technology 解耦合实例—一业务逻辑与DB访问未分离(5/6) /获得打折比率 Preparedstatement stmt promotion s conn prepare Statement('SELECT RATIO FROM PROMOTION WHERE CUST_LEVEL =? i stmt_promotion, setInt(1, cust_IVDi Resultset rset promotion stmt_promotion, executeQueryo; double ratio s 1: if(rset_ promotion, nexto) ratio =rset_promotion, getDouble(1)H /计算最终支付金额 amount ratioj
Web Technology 解耦合实例——业务逻辑与DB访问未分离(5/6) //获得打折比率 PreparedStatement stmt_promotion = conn.prepareStatement(“SELECT RATIO FROM PROMOTION WHERE CUST_LEVEL = ?”); stmt_promotion.setInt(1, cust_lvl); ResultSet rset_promotion = stmt_promotion.executeQuery(); double ratio = 1; if(rset_promotion.next()) ratio = rset_promotion.getDouble(1); //计算最终支付金额 amount *= ratio;
Web Technology 解耦合实例—一业务逻辑与DB访问未分离(5/6) ∥结果存入客户信息 reparedstatement stmt updtcust conn prepare Statement("UPDATE CUSTOMER SET SUM AMOUNT E SUM AMOUNT = WHERE ID=?D stmt_updtcust, setDouble(1, amount); stmt_updtcust setstring(2, id) stmt_ _updtcust executeUpdate i stmt updtcustclose; stmt_ _promotion. close; rset promotion. close oi rset_ cust. close o; stmt cust.close i return amountr
Web Technology 解耦合实例——业务逻辑与DB访问未分离(5/6) //结果存入客户信息 PreparedStatement stmt_updtcust = conn.prepareStatement( “UPDATE CUSTOMER SET SUM_AMOUNT = SUM_AMOUNT = ? WHERE ID = ?” ); stmt_updtcust.setDouble(1, amount); stmt_updtcust.setString(2, id); stmt_updtcust.executeUpdate(); stmt_updtcust.close(); stmt_promotion.close(); rset_promotion.close(); } rset_cust.close(); stmt_cust.close(); return amount; }
Web Technology 解耦合实例——业务逻辑与DB访问分离(6/6) public double calcAmount(string id, double amount Customer customer= CustomerDAO get customer(id; Promotionpromotion Promotion DAO. getPromotion(customer. getLevelo) amount * promotion, getRatiooi customer. setsum Amount(customer getsum(add (amount; CustomerDAO. save(customer); return amount;
Web Technology 解耦合实例——业务逻辑与DB访问分离(6/6) public double calcAmount(String id, double amount) { Customer customer = CustomerDAO.getCustomer(id); Promotion promotion = PromotionDAO.getPromotion(customer.getLevel()); amount *= promotion.getRatio(); customer.setSumAmount(customer.getSumAmount().add (amount)); CustomerDAO.save(customer); return amount; }