技术中心

这里象征着我们的态度和能力

>JavaEE中的级联删除讲解级源码
发布者:中国IT实验室    信息来源:中国IT实验室    发布时间:2012-05-03      浏览次数:7375
分享到:

新浪微博

腾讯微博

QQ空间

豆瓣网

QQ好友

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入
    我们在做项目开发的时候,一定会遇到多个表之间相关联的情况,在这种情况下,我们如果想要删除其中的某个表中的数据,就要连同其他表中与之对应的数据删除。例如:我们设计一个客户表,一个订单表,一个订单明细表。在每个客户表中对应多个订单表,而每个订单表对应着多个订单明细表,当我们想要删除一个客户,那么我们就得把这个客户对应的订单表以及其对应的订单明细表一同删除,那么这是我们就用到了级联删除。
    我们在使用级联删除时, 如果遇到多对一关系或者一对多关系时,我们应该先删除多的一方,然后在删除一的一方。如上例,当我们删出客户时应当先删除用户对应的所有订单表,而当删除订单表时我们又得先删除与之对应的所有订单明细表。所以我们就应该先删除订单明细表,再删除订单表最后删除客户。但我们在使用级联删除时我们应该将这些删除操作都包含在一个事务中,如果我们在操作中有一处不成功我们就得让事务回滚。如果全部成功我们才能提交事务,这样才能保证我们的级联删除成功,而且不会造成只删除部分数据。下面是我们编写的级联删除的代码部分:首先我们先封装俩个工具类这是线面几个类都得用的到达类:
    数据库连接池:packagecn.csdn.products.util;importjava.sql.*;publicclass JdbcUtil {
    /* 私有的静态的成员变量*/
    private static Connection conn = null;
    /* 私有的构造器 */
    private JdbcUtil() {
    }
    /* 公有静态的返回 成员变量的方法 */
    public static Connection getConn() {
    if (conn == null) {
    try {
    Class.forName("com.mysql.jdbc.Driver");
    conn=DriverManager
    .getConnection("jdbc:mysql://localhost:3306/products?user=root&password=root&useUnicode=true&characterEncoding=UTF8");
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    return conn;
    }
    /* 公有静态的没有 返回值 对数据库操作的对象的关闭操作 */
    public static void release(ResultSet rs,PreparedStatement pstmt) {
    /* 关闭结果集 */
    if (rs != null) {
    try {
    rs.close();
    } catch (SQLException e) {
    // TODO Auto-generated catchblock
    e.printStackTrace();
    }
    }
    /* 关闭预处理对象 */
    if (pstmt != null) {
    try {
    pstmt.close();
    } catch (SQLException e) {
    // TODO Auto-generated catchblock
    e.printStackTrace();
    }
    }
    }
    public static void main(String[] args) {
    System.out.println(JdbcUtil.getConn());
    }}Dao工具类package cn.csdn.products.util;import java.util.List;public interface Dao<T, PK> {
    boolean insert(T entity);
    boolean delete(T entity);
    boolean deleteById(PK id);
    boolean update(T entity);
    T findById(PK id);
    List<T> findAll();
    List<T> findNowPageInfo(int nowpage,int pagesize,String where);}//删除订单明细表中的数据//订单明细表dao层public interface OrderDetailsDao extendsDao<OrderDetails, Integer> {
    void deleteByOid(Integer oid);}public class OrderDetailsDaoImpl implements OrderDetailsDao { /* 封装数据库操作的信息 */
    private Connection conn = null;
    private PreparedStatement pstmt = null;
    private ResultSet rs = null;public void deleteByOid(Integer oid) {
    // 第二步:获取连接对象
    conn = JdbcUtil.getConn();
    try {
    // 关闭事务
    conn.setAutoCommit(false);
    // 第三步:声明sql语句oid是order(订单表中的外键)
    String sql = "delete from orderdetails where oid =?";
    // 第四步: 根据sql语句用conn创建预处理对象
    pstmt = conn.prepareStatement(sql);
    // 第五步:为占位符 赋值 索引从1开始
    int index = 1;
    pstmt.setObject(index++,oid);

[1] [2] 下一页

4000-880-989
(24小时热线)
联系客服
微信公众号

官方公众号

小程序

©2008-2022 CORPORATION ALL Rights Reserved. 昆明奥远科技有限公司版权所有 滇ICP备09003328号-1 滇公网安备 53011102000818号
昆明那家网络公司好,新媒体运营,网站优化,网络推广,网站建设,网页设计,网站设计,网站推广,云南网站公司,昆明新媒体公司,云南网红主播,昆明SEO公司,昆明网站建设,昆明网络推广,昆明网站优化,昆明网站推广,红河网站建设,大理网络公司,曲靖网络公司,丽江网站设计,昭通网络公司,保山大数据服务,智慧高速建设,智慧校园服务,云南IDC服务商,网络安全测评,等保测评,网站关键词排名优化服务,服务客户尽超2000余家,一切尽在奥远科技,服务电话:13888956730