`
jallay
  • 浏览: 43812 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

用JDBC处理一对一的关系

阅读更多
类与类之间存在多种关系:组件关系,继承关系,关联关系。
  其中:关联关系有分为:一对一,一对多,多对一,多对多几种。
以下就一对一的关联关系进行说明:
   所谓一对一的关联关系就是指一个类的一个对象在另一个类中只有且只有一个与之对应的对象,翻过来也一样。就好比身份证与人一样。一个身份证只能属于一个人,一个人只能拥有一个身份证号一样。
   如何将这种关系用JDBC将其反映到数据库中去了:
    1)建立连个类:Person1, PersonCard;

  (1)person1类:

public class Person1 {
	private Integer id;
	private String name;
	private String address;
	private PersonCard personCard;
	
	public Person1() {
		super();
	}

	public Person1(String name, String address, PersonCard personCard) {
		super();
		this.name = name;
		this.address = address;
		this.personCard = personCard;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public PersonCard getPersonCard() {
		return personCard;
	}

	public void setPersonCard(PersonCard personCard) {
		this.personCard = personCard;
	}
	
	/*
	 *fucntion:mantain the relation between personCard and person when adding 
	 *         a person,we should also add the person's personCard.
	 *variable:personCard information
	 * */
	public void addPersonCard(PersonCard personCard){
		this.personCard=personCard;
		personCard.addPersonInfo(this);
	}
	
	/*
	 * function: remove the person relation to the personCard.
	 * variable: personCard information
	 * */
	public void removePersonCard(PersonCard personCard){
		this.personCard.remove();
		this.personCard=null;
		
	}
}


PersonCard类:

public class PersonCard {
	private Integer id;
	private String cardNum;
	private int cardSize;
	private Person1 person;
	
	public PersonCard() {
		super();
	}
	
	public PersonCard(String cardNum, int cardSize) {
		super();
		this.cardNum = cardNum;
		this.cardSize = cardSize;
	}

	public Integer getId() {
		return id;
	}
	
	public void setId(Integer id) {
		this.id = id;
	}
	
	public String getCardNum() {
		return cardNum;
	}
	
	public void setCardNum(String cardNum) {
		this.cardNum = cardNum;
	}
	
	public int getCardSize() {
		return cardSize;
	}
	
	public void setCardSize(int cardSize) {
		this.cardSize = cardSize;
	}

	public Person1 getPerson() {
		return person;
	}

	public void setPerson(Person1 person) {
		this.person = person;
	}
	
	/*
	 *function:keep the relation betwwen this
	 *variable:person information
	 * */
	public void addPersonInfo(Person1 person){
		this.person=person;
	}
	
	/*
	 *fucntion:delete the the person.
	 *variable:null  
	 * */
	public void remove(){
		this.person=null;
	}

}


在数据库中创建与之对应的表。并将类之间的关系正确的反应到数据库表中去:

create sequence person1_sequence;
create sequence personCard_sequence;

create table person1
(
id number(7) primary key,
name varchar2(20) not null,
address varchar2(30) not null
);

create table personCard
(
id number(7) primary key,
cardNum varchar2(20) not null unique,
carSize number(7) not null,
person_id number(7) references person1(id) unique
)

用JDBC实现上述关系:

import java.sql.*;

import com.UtilTool.*;
public class DAO {
	
	/*
	 * function:when you add a new person,you should also add a new personCard
	 * variable:the person object and the personCard object
	 * */
	public void addNewPerson(Person1 person,PersonCard personCard)throws Exception{
		Connection conn=null;
		PreparedStatement pstm=null;
		
		try{
			/*get the sequence for the object's id*/
			person.setId(this.getPersonIdSequence());
			conn=ConnectTool.getConnection();
			conn.setAutoCommit(false);
			/*insert into the table person1 for the person information*/
			String insertPersonInfo="insert into person1(id,name,address)" +
					" values(?,?,?)";
			pstm=conn.prepareStatement(insertPersonInfo);
			pstm.setInt(1,person.getId());
			pstm.setString(2, person.getName());
			pstm.setString(3, person.getAddress());
			pstm.execute();
			
			/*this is the same to the upper*/
			personCard.setId(this.getPersonCardSequence());
			personCard.setPerson(person);
			String insertPersonCardInfo=" insert into personCard(id,cardNum," +
					"carSize,person_id) values(?,?,?,?)";
			pstm=conn.prepareStatement(insertPersonCardInfo);
			pstm.setInt(1, personCard.getId());
			pstm.setString(2,personCard.getCardNum());
			pstm.setInt(3, personCard.getId());
			pstm.setInt(4,personCard.getPerson().getId());
			
			conn.commit();
		}finally{
			ConnectTool.releasersc(null, pstm, null);
			
		}
	}

	/*
	 * function: update the person information
	 * */
	public void updatePerson(Person1 person)throws Exception{
		Connection conn=null;
		PreparedStatement pstm=null;
		
		try{
			person.setId(this.getPersonIdSequence());
			conn=ConnectTool.getConnection();
			conn.setAutoCommit(false);
			String updatePersonInfo="update person1 " +
					"set name=?,address=? where id=?;";
			pstm=conn.prepareStatement(updatePersonInfo);
			pstm.setString(1, person.getName());
			pstm.setString(2, person.getAddress());
			pstm.setInt(3,person.getId());
			pstm.execute();
		}finally{
			ConnectTool.releasersc(null, pstm, null);
		}
	}

	/*
	 * function:query the person information by the cardNum
	 * */
	public Person1 Query(String cardNum)throws Exception{
		Connection conn=null;
		PreparedStatement pstm=null;
		ResultSet rs=null;
		PersonCard personCard=null;
		Person1 person=null;
		
		try{
	        conn=ConnectTool.getConnection();
			String sql="  select pc.id,pc.cardNum,pc.carSize,ps." +
					"id,ps.name,ps.address" +
					" from personCard pc inner join person1 ps " +
					"on(pc.person_id=ps.id)  where cardnum=?";
			pstm=conn.prepareStatement(sql);
			pstm.setString(1, cardNum);
			rs=pstm.executeQuery();
			if(rs.next()){
				person=new Person1();
				personCard=new PersonCard();
				personCard.setId(rs.getInt(1));
				personCard.setCardNum(rs.getString(2));
				personCard.setCardSize(rs.getInt(3));
				person.setId(rs.getInt(4));
				person.setName(rs.getString(5));
				person.setAddress(rs.getString(6));
				personCard.setPerson(person);
				person.setPersonCard(personCard);
			}
			
		}finally{
			ConnectTool.releasersc(rs, pstm, null);
		}
		return person;
		
	}
	
	
	public void deletePerson(PersonCard personCard)throws Exception{
		Connection conn=null;
		PreparedStatement pstm=null;
		
		try{
			conn=ConnectTool.getConnection();
			conn.setAutoCommit(false);
			String sql1="delete from personCard where id=?";
			String sql2="delete from person1 where id=?";
				pstm=conn.prepareStatement(sql1);
				pstm.setInt(1, personCard.getId());
				pstm.execute();
			    pstm=conn.prepareStatement(sql2);
			    pstm.setInt(1, personCard.getPerson().getId());
			    pstm.execute();
			    conn.commit();
				
		}finally{
			ConnectTool.releasersc(null, pstm, null);
		}
	}
	
	private Integer getPersonIdSequence()throws Exception{
		Connection con=null;
		PreparedStatement pstm=null;
		ResultSet rs=null;
		Integer OId=null;
		try{
			con=ConnectTool.getConnection();
			String sql="select person1_sequence.nextVal from dual";
			pstm=con.prepareStatement(sql);
			rs=pstm.executeQuery();
			rs.next();
			OId=rs.getInt(1);
			
			
		}finally{
			ConnectTool.releasersc(rs, pstm, null);
		}
		return OId;
	}
	
	private Integer getPersonCardSequence()throws Exception{
		Connection con=null;
		PreparedStatement pstm=null;
		ResultSet rs=null;
		Integer OId=null;
		try{
			con=ConnectTool.getConnection();
			String sql="select personCard_sequence.nextVal from dual";
			pstm=con.prepareStatement(sql);
			rs=pstm.executeQuery();
			rs.next();
			OId=rs.getInt(1);
			
			
		}finally{
			ConnectTool.releasersc(rs, pstm, null);
		}
		return OId;
	}

}


以下是测试上述代码的列子:

import java.sql.Connection;

import com.UtilTool.*;
public class Test {
	public static void main(String[] args)throws Exception{
		Connection conn=ConnectTool.getConnection();
		//Person1 person=new Person1("123","456");
		//PersonCard personCard=new PersonCard("8999",3);
		DAO dao=new DAO();
		//dao.addNewPerson(person, personCard);
	   //System.out.println(dao.Query("8999").getName());
		conn.commit();
	}

}

分享到:
评论

相关推荐

    JDK版本与JDBC版本的关系

    - 这一时期,JDBC的功能得到了显著增强,使得Java应用程序能够更加高效地处理数据库操作。 - **JDK 1.3+ J2EE - JDBC 2 EE** - JDK 1.3结合J2EE(Java 2 Platform, Enterprise Edition)引入了JDBC 2 EE,这一...

    JDBC_一对多查询_JDBC_daoB[收集].pdf

    总结来说,这个例子展示了如何使用JDBC和DAO模式处理一对多关系的数据查询。通过`IGradesDao`和`IStudentsDao`接口定义数据库操作,实现类`GradesDaoImpl`负责具体实现,包括SQL查询、结果集处理和异常管理。这样的...

    自学jdbc心得体会

    * JDBC对于使用者要有一致性,对不同的数据库其使用方法都是相同的。 * 驱动开发必须要实现Driver接口。 二、JDBC的API * java.sql包和javax.sql包 * Driver接口(驱动):在加载某一Driver类时,它应该创建自己的...

    Java用JDBC实现对Oracle数据库操作

    JDBC是Java中用于与各种数据库通信的标准接口,而Oracle数据库是一个广泛使用的商业关系型数据库系统。在这个主题中,我们将深入探讨以下几个关键知识点: 1. **JDBC驱动**: 在Java中与Oracle数据库交互,首先需要...

    JDBC资料文档第一部分

    JDBC(Java Database Connectivity),即Java数据库连接,是一种用于执行SQL语句的标准Java API,它可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了面向数据库的一定程度的...

    一份详尽的jdbc教材

    JDBC(Java Database Connectivity)是Java平台上的一个重要组成部分,它提供了与各种关系数据库进行交互的能力。本教材旨在为初学者及进阶用户深入理解并掌握JDBC的核心概念和技术细节提供全面指导。 #### 二、...

    使用jdbc动态连接数据库

    JDBC,即Java DataBase Connectivity标准,是一个由Sun Microsystems设计的API(应用程序编程接口),它允许Java程序与各种关系型数据库进行交互。作为Java核心类库的一部分,JDBC的一个显著特点是它的通用性和独立...

    JDBC 4.3规范文档

    JDBC规范的API允许Java应用程序能够与各种关系数据库进行交互操作,其核心功能包括创建连接、发送SQL命令、处理结果集等。JDBC支持多种类型的数据源连接,包括本地文件数据库、远程数据库服务器,以及各种不同的数据...

    JDBC和ODBC的区别

    JDBC通过提供一系列的接口和类,允许Java应用程序发送SQL语句到数据库,并处理数据库返回的结果。 #### ODBC(Open Database Connectivity) ODBC是一种用于访问数据库的标准API,最初由微软提出,后来成为跨平台的...

    使用jdbc连接mysql对数据进行增删改的小项目

    这是一个小型的Web应用,旨在通过JDBC接口与MySQL数据库交互,实现数据的增、删、改操作,而没有使用Servlet作为控制器。下面我们将详细探讨这三个关键点。 **1. JDBC** JDBC是Java平台中用于与各种类型数据库通信...

    jdbc资料jdbc资料jdbc资料pdf

    **JDBC**(Java Database Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了与数据库建立连接、发送SQL语句并处理结果的基本...

    Android使用JDBC连接本地数据库

    SQLite JDBC是一个开源项目,提供了对SQLite数据库的JDBC驱动支持。在Android中使用它,首先需要将对应的jar文件添加到项目的libs目录下,并在构建路径中包含进来。 **知识点4:Android JDBC Driver** Android JDBC...

    Jdbcsupport培训 详细讲解jdbcsupport

    Jdbcsupport是Spring框架中用于简化JDBC操作的一个组件,它是Spring对DAO层支持的一部分。Jdbcsupport提供了一种方便的方式来管理数据库连接和执行SQL语句,减少了手动处理数据库连接、事务管理等繁琐工作,使开发...

    jdbc入门至精通

    创建一个完整的JDBC连接示例,包括异常处理: ```java try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/mydatabase", "username",...

    jdbc_on_oracle

    JDBC是一种标准的Java API,用于在Java应用程序中访问关系型数据库。它为开发人员提供了一种独立于底层数据库系统的方法来执行SQL语句,从而实现了数据库的抽象化和代码的可移植性。Oracle提供了自己的JDBC驱动程序...

    sqljdbc和sqljdbc4

    3. **JPA 2.0支持**: 提供了对对象关系映射(ORM)的增强,便于持久化Java对象到数据库表。 **JSP连接SQL Server**:在JSP中使用SQLJDBC4,首先需要将`sqljdbc4.jar`添加到项目的类路径中。然后,可以通过以下步骤...

    jdbc连接使用jar包 Access_JDBC40.jar

    在Java编程中,JDBC(Java Database Connectivity)是Java平台的标准接口,用于连接各种关系数据库。本主题聚焦于使用`Access_JDBC40.jar`这个特定的JDBC驱动包来与Microsoft Access数据库进行交互。`Access_JDBC40....

    spring对jdbc的支持jar包

    本文将深入探讨Spring对JDBC(Java Database Connectivity)的支持,以及如何在实际项目中使用这些功能。 首先,Spring JDBC的核心是`org.springframework.jdbc`包,它提供了一套高级抽象,用于简化数据库操作。在...

    javajdbc课程设计

    此外,可能还需要考虑表间的关系,如一对一、一对多或多对多关系,并通过外键来实现。 4. **SQL语言**:SQL(Structured Query Language)是用于管理和操作数据库的语言。在本项目中,可能使用了SQL语句进行数据的...

Global site tag (gtag.js) - Google Analytics