java操作两表关系

本文介绍了JAVA如何处理数据库中的四种表关系:双向一对一,一对多,多对一,多对多,并提供了具体的实体类和DAO接口实现示例。同时,详细讲解了JDBC中的事务管理,包括自动提交、手动提交、回滚和保存点的使用,以确保数据的一致性和完整性。
摘要由CSDN通过智能技术生成

JAVA操作两表关系

     四种:双向一对一,一对多,多对一,多对多
     多表关系处理数据
          (1) 数据库通过外键建立两表关系
          (2) 实体类通过属性的方式建立两表关系
          实体类要求:类名=表名,列名=属性名

     一对多(老师->学生)

          在一方创建存储多方的集合
               List studentList;
          定义dao接口
               定义一个根据老师id查询老师信息(学生的信息)
               public Teacher getById(int tid);
          定义实现类:
               连接数据库
               执行sql语句

List<student> students=new ArrayList<student>(); 
while (resultSet.next()){
	 //1.取出各自的信息 
	teacher.setTid(resultSet.getInt("tid")); 
	teacher.setTname(resultSet.getString("tname")); 

	Student student = new Student(); 
	student.setStuId(resultSet.getInt("stuid")); 
	student.setStuName(resultSet.getString("stuname")); 
	//2.建立学生和老师之间的关系 
	students.add(student); 
} 
teacher.setStudentList(students); 
return teacher;

     多对一(学生->老师)

          在多方创建一个用于存储一方的对象
               private Teacher teacher;
          在接口新增:
               //查询所有的学生(包含老师的信息)
          实现类:
               连接数据库,执行sql语句

public List getAll();
	List students=new ArrayList<>(); 
	while (resultSet.next()){ 
		//1.取出各自的信息 
		Student student = new Student(); 
		student.setStuId(resultSet.getInt("stuid")); 
		student.setStuName(resultSet.getString("stuname")); 
		Teacher teacher = new Teacher(); 
		teacher.setTid(resultSet.getInt("tid")); 
		teacher.setTname(resultSet.getString("tname")); 
		//2.建立学生和老师之间的关系 
		student.setTeacher(teacher); students.add(student); 
	} 
return students;

     一对一(妻子丈夫)

          在任何一方都有对方的对象
          定义接口:
               //查询妻子信息(包含丈夫信息)
               public Wife getWife(int wid);
               //查询丈夫信息(包含妻子信息)
               public Husband getHus(int hid);
          实现类:

Wife wife = new Wife(); 
while (resultSet.next()){ 
	//1.取出各自的信息 
	wife.setWifeId(resultSet.getInt("wifeid")); 
	wife.setWifeName(resultSet.getString("wifename")); 

	Husband husband = new Husband(); 
	husband.setHusId(resultSet.getInt("husid")); 
	husband.setHusName(resultSet.getString("husname")); 
	//2.建立妻子和丈夫之间的关系 
	wife.setHusband(husband); 
} 
return wife;

     通过丈夫找妻子的方法同上,改一下返回的值

      多对多(科目-学生)

          双方都有对方的集合
          接口:
               //查询某个学生信息(查询出所学科目)
               public Student findById(int id);
                //查询某个科目以及对应的学生姓名
               public Subject findBySubId(int subId);
          实现类:

Student student = new Student(); 
List subjects=new ArrayList<>(); 
while (resultSet.next()){ 
	//1.取出各自的信息 
	student.setStuId(resultSet.getInt("stuid")); 
	student.setStuName(resultSet.getString("stuname")); 
	Subject subject = new Subject(); 
	subject.setSubId(resultSet.getInt("subid")); 
	subject.setSubName(resultSet.getString("subname")); 
	subjects.add(subject); 
} 
//2.建立学生和科目之间的关系 
student.setSubjects(subjects); 
return student;

     查询科目ID同上,参考一对多的思想

数据库事务

     JDBC中事务应用

          如JDBC连接处于自动提交模式,默认情况下,则每个SQL语句在完成后都会提交到数据库
          事务使您能够控制是否和何时更改应用于数据库。它将单个SQL语句或一组SQL语句视为一
          个逻辑单 元,如果任何语句失败,则整个事务将失败。
               connection.setAutoCommit(布尔值)
                    True:自动提交
                    False:手动提交
          完成更改后,我们要提交更改,然后在连接对象上调用commit()方法
               conn.commit();
          要使用连接名为conn的数据库回滚更新
               conn.rollback( );
          在Catch中编写

     Savepoints

          保存点
          新的JDBC 3.0 Savepoint接口为您提供了额外的事务控制。
          设置保存点时,可以在事务中定义逻辑回滚点。如果通过保存点发生错误,则可以使用回滚
          方法来撤消 所有更改或仅保存在保存点之后所做的更改。
          Connection对象有两种新的方法来帮助您管理保存点:
               - setSavepoint(String savepointName):定义新的保存点。它还返回一个Savepoint
                    对象。
               - releaseSavepoint(Savepoint savepointName):删除保存点。请注意,它需要一个
                    Savepoint 对象作为参数。此对象通常是由setSavepoint()方法生成的保存点
          1、要取消掉JDBC的自动提交:void setAutoCommit(boolean autoCommit)
          2、执行各个SQL语句,加入到批处理之中
          3、如果所有语句执行成功,则提交事务 commit();如果出现了错误,则回滚:rollback()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王某人@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值