我们在做项目开发的时候,一定会遇到多个表之间相关联的情况,在这种情况下,我们如果想要删除其中的某个表中的数据,就要连同其他表中与之对应的数据删除。例如:我们设计一个客户表,一个订单表,一个订单明细表。在每个客户表中对应多个订单表,而每个订单表对应着多个订单明细表,当我们想要删除一个客户,那么我们就得把这个客户对应的订单表以及其对应的订单明细表一同删除,那么这是我们就用到了级联删除。
我们在使用级联删除时, 如果遇到多对一关系或者一对多关系时,我们应该先删除多的一方,然后在删除一的一方。如上例,当我们删出客户时应当先删除用户对应的所有订单表,而当删除订单表时我们又得先删除与之对应的所有订单明细表。所以我们就应该先删除订单明细表,再删除订单表最后删除客户。
但我们在使用级联删除时我们应该将
阿里巴巴批发网
这些删除操作都包含在一个事务中,如果我们在操作中有一处不成功我们就得让事务回滚。如果全部成功我们才能提交事务,这样才能保证我们的级联删除成功,而且不会造成只删除部分数据。
下面是
瑜伽服套装我们编写的级联删除的代码部分:
首先我们先封装俩个工具类这是线面几个类都得用的到达类:
数据库连接池:
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);
// 第六步:执行 更新,或查询
pstmt.executeUpdate();
// 第七步:释放资源
JdbcUtil.release(rs, pstmt);
} catch (Exceptione) {
// TODO Auto-generated catch block
try {
conn.rollback();// 回滚
} catch (SQLException e1) {
e1.printStackTrace();
}
} finally {
try {
conn.setAutoCommit(true);// 开启自动提交
} catch(SQLException e) {
e.printStackTrace();
}
}
}
}
//orderDao层(order表示订单表影射的类)
package cn.csdn.products.dao;
import java.util.List;
import cn.csdn.products.domain.Orders;
import cn.csdn.products.util.Dao;
public interface OrdersDao extendsDao<Orders, Integer> {
//获取与客户关联的订单
List<Orders>findByCid(Integer cid);
//删除与客户关联的订单的记录
voiddeleteByCid(Integer cid);
}
//orderDaoImpl层
package cn.csdn.products.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import cn.csdn.products.domain.Orders;
import cn.csdn.products.util.JdbcUtil;
public class OrdersDaoImpl implements OrdersDao {
/* 封装数据库操作的信息 */
private Connection conn = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
public boolean deleteById(Integer id) {
// 先删除 多的哪一方
OrderDetailsDao odd = new OrderDetailsDaoImpl();
odd.deleteByOid(id);
// 第一步 声明返回值变量
boolean flag = false;
// 第二步:获取连接对象
conn = JdbcUtil.getConn();
try {
// 关闭事务
conn.setAutoCommit(flag);
// 第三步:声明sql语句
String sql = "delete from orders where id =?";
// 第四步: 根据sql语句用conn创建预处理对象
pstmt = conn.prepareStatement(sql);
// 第五步:为占位符 赋值 索引从1开始
int index = 1;
pstmt.setObject(index++, id);
// 第六步:执行 更新,或查询
int i =pstmt.executeUpdate();
// 第七步:判断
if (i > 0){
flag = true;
}
} catch (Exceptione) {
// TODO Auto-generated catch block
try {
conn.rollback();// 回滚
} catch(SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} finally {
try {
conn.setAutoCommit(true);// 开启自动提交
} catch(SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 第八步:释放资源
JdbcUtil.release(rs, pstmt);
/* 记得修改其返回值变量 */
return flag;
}
}
//客户映射的类的Dao层
package cn.csdn.products.dao;
import cn.csdn.products.domain.Customers;
import cn.csdn.products.util.Dao;
public interface CustomersDao extendsDao<Customers, Integer> {
}
//客户的DaoImpl层
package cn.csdn.products.dao;
import java.util.List;
import cn.csdn.products.domain.Customers;
public class CustomersDaoImpl implements CustomersDao{
public boolean delete(Customers entity) {
returndeleteById(entity.getId());
}
public boolean deleteById(Integer id) {
OrdersDao oDao = new OrdersDaoImpl();
oDao.deleteByCid(id);
return false;
}
}
分享到:
相关推荐
JavaEE课程设计:票据管理系统源码 JavaEE课程设计:票据管理系统源码 JavaEE课程设计:票据管理系统源码 JavaEE课程设计:票据管理系统源码 JavaEE课程设计:票据管理系统源码 JavaEE课程设计:票据管理系统...
基于JavaEE的网上购物商城系统源码+数据库(毕业设计).zip 已获导师指导并通过的高分项目,下载即用无需修改,高分必过项目,功能完善代码齐全。 基于JavaEE的网上购物商城系统源码+数据库(毕业设计).zip 已获...
基于javaee的高校培训管理系统源码+数据库(毕业设计).zip 高分必过项目,成功毕业啦,下载即用无需修改。 基于javaee的高校培训管理系统源码+数据库(毕业设计).zip 高分必过项目,成功毕业啦,下载即用无需...
JavaEE期末大作业博客系统源码基于springboot和vue实现的前后端分离的博客系统源代码.zip 运行项目流程如下: 选择一个数据库执行 m_blog.sql 文件。 用 idea 打开 blog_demo ,更改配置文件 application.yml 中的...
JAVAEE课程设计基于JAVAEE的社团管理系统源码.zipJAVAEE课程设计基于JAVAEE的社团管理系统源码.zipJAVAEE课程设计基于JAVAEE的社团管理系统源码.zipJAVAEE课程设计基于JAVAEE的社团管理系统源码.zipJAVAEE课程设计...
JavaEE企业级应用开发教程源码
可在 eclipse 中查看 java javaee 源码java javaee 源码java javaee 源码java javaee 源码java javaee 源码java javaee 源码java javaee 源码java javaee 源码
飞达商贸有限公司POS系统 东城大学在线答疑系统 A10酒店预订管理系统 远洋网络购物广场商务系统 时讯科技人事管理系统 骄阳网上票务查询系统 慕仁大学图书馆管理系统 华北城市大学学生管理系统 迅捷中介二手房交易...
基于javaEE+SSH框架模板项目源码
javaee源码包 包括javax相关源码 作为学习框架与大家共享
JavaEE编程技术第二版源码--郝玉龙。有第二章到第九章的源码。清华大学出版社出版的高等学校计算机科学与技术教材源代码。
轻量级javaee企业应用实战第4版源码,第一和第二章重点源码,就是这样。以后会陆续发之后的代码。jar包有,data.sql也有一些
JavaEE实验,javaee实验心得体会,Java源码
Java项目实战-javaEE土地档案管理系统(附源码,部署说明).zip
javax.*下面的源码。 对应的jar包为javaee.jar
JAVAEE MVC架构餐饮管理系统源码 源码描述: 一、源码介绍 JAVAEE MVC架构餐饮管理系统源码使用servlet,mysql实现了简单的餐厅点餐的功能。 二、主要功能 实现的主要功能又:查看菜单,点餐,添加订单的功能。 ...