学生管理系统,使用MySQL数据库存储,jdbc操作实现增删改查

前几天用集合作为临时容器写了一个简单的学生管理系统,但是毕竟数组不能真正作为数据库来长期存储,所以这次我就用MySQL数据库作为数据库来存数据,用java中jdbc来操作数据库。

工具:STS,MYSQL数据库。

实现思想:将整个系统分为三层

1.界面层(User Interface layer)

2.业务逻辑层(Business Logic Layer)

3.数据访问层(Data access layer)

创建实体对象,通过数据访问层来实现与数据库的交互,通过业务逻辑层来实现一些增删改查的方法,界面层实现与用户的交互,方便用户对其进行操作。

实现过程:

一、创建数据库,建表来存储学生对象,这里我使用mysql建立了一个mangerstore数据库,建了一个student表。里面存储的学生对象属性有学号,名字,年龄,性别

 二、开始搭建我们的三层架构

1.界面层(User Interface layer)

2.业务逻辑层(Business Logic Layer)

3.数据访问层(Data access layer):

 三、创建数据访问层(DAO层)

  • 前面我们在使用JDBC时解决的都是一些很简单的问题,例如简单的增、删、改、查等等,所以直接把代码写在了main方法中。
  • 这种写法很容易出现代码冗余、耦合度高、不能模块化开发等等诸多弊端,特别是将来我们做大型实战项目时该怎么办呢?这时业务会更加复杂。DAO模式就可以解决这个问题。
  • DAO(Data Access Object)即:数据存取对象,它是位于业务逻辑和底层数据库之间,专门使用JDBC实现数据持久化的一种“套路”,通常称之为DAO模式
  • 使用DAO模式进行项目开发主要有以下两个好处:
  • 1.  隔离了业务逻辑代码和数据访问代码,分工明确,降低耦合性,提高可重用性。
  •  2.  采用面向接口编程,提高了项目的可扩展性和可维护性。
  • 一个典型的DAO模式主要有以下几部分组成:
  •  1.   一个工厂类,主要负责创建和关闭Connection对象
  • package com.xintouyun.sm.util;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Scanner;
    
    public final class ConnectionFactory {
    	private static String DRIVER_CLASS = "com.mysql.jdbc.Driver";
    	private static String URL="jdbc:mysql:///mangerstore";
    	private static String USER = "root";
    	private static String PASSWORD = "123456";
    	
    	static {
    		try {
    			Class.forName(DRIVER_CLASS);
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    	}
    	public static Connection getConnection()  {
    		try {
    			return DriverManager.getConnection(URL, USER, PASSWORD);
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return null;
    	}
    	public static void closeAll(ResultSet rs, Statement st, Connection conn) {
    		try {
    			if (rs != null)
    				rs.close();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		} finally {
    		try {
    			if (st != null)
    				st.close();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		} finally {
    			if (conn != null)
    		try {
    			conn.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    			}
    		}
    	}
    }
    

     

  •  2.   DAO接口,定义业务方法
  • package com.xintouyun.sm.dao;
    
    import java.util.List;
    
    import com.xintouyun.sm.entity.Student;
    
    public interface StudentDao {
    	int save(Student student);
    	int delete(String studentNo);
    	Student queryStudentBySno(String sno);
    	int update(String studentNo,String name,int age,String sex);
    	List<Student> queryAll();
    }
    

     

  •  3.  DAO实现类,实现DAO接口,完成具体功能
  • package com.xintouyun.sm.dao.impl;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.ArrayList;
    import java.util.List;
    
    import com.xintouyun.sm.dao.StudentDao;
    import com.xintouyun.sm.entity.Student;
    import com.xintouyun.sm.util.ConnectionFactory;
    
    public class StudentDaoImpl implements StudentDao {
    
    	@Override
    	public int save(Student student) {
    		
    		Connection conn = null;
    		PreparedStatement st = null;
    		ResultSet rs = null;
    		int affectedRow = 0;
    		
    		try {
    			conn = ConnectionFactory.getConnection();
    			st = conn.prepareStatement("insert into student (studentNo,name,sex,age) values(?,?,?,?)");
    			
    			st.setString(1, student.getNum());
    			st.setString(2, student.getName());
    			st.setString(3, student.getSex());
    			st.setInt(4, student.getAge());
    			
    			affectedRow = st.executeUpdate();
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			ConnectionFactory.closeAll(rs, st, conn);
    		}
    		return affectedRow;
    	}
    
    	@Override
    	public Student queryStudentBySno(String studentNo) {
    		
    		Connection conn = null;
    		PreparedStatement st = null;
    		ResultSet rs = null;
    		Student student = null;
    		
    		try {
    			conn = ConnectionFactory.getConnection();
    			st = conn.prepareStatement("select * from student where studentNo=?");
    			
    			st.setString(1, studentNo);
    		
    			rs = st.executeQuery();
    			while(rs.next()) {
    				student = new Student();
    				student.setName(rs.getString("name"));
    				student.setNum(rs.getString("studentNo"));
    				student.setAge(rs.getInt("age"));
    				student.setSex(rs.getString("sex"));
    			}
    			
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			ConnectionFactory.closeAll(rs, st, conn);
    		}
    		return student;
    	}
    
    	@Override
    	public List<Student> queryAll() {
    
    		
    		Connection conn = null;
    		PreparedStatement st = null;
    		ResultSet rs = null;
    		List<Student> students = new ArrayList<>();
    		
    		try {
    			conn = ConnectionFactory.getConnection();
    			st = conn.prepareStatement("select * from student");
    			
    		
    			rs = st.executeQuery();
    			while(rs.next()) {
    				Student student = new Student();
    				student.setName(rs.getString("name"));
    				student.setNum(rs.getString("studentNo"));
    				student.setAge(rs.getInt("age"));
    				student.setSex(rs.getString("sex"));
    				
    				students.add(student);
    			}
    			
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			ConnectionFactory.closeAll(rs, st, conn);
    		}
    		return students;
    	
    	}
    
    	@Override
    	public int delete(String studentNo) {
    
    		
    		Connection conn = null;
    		PreparedStatement st = null;
    		ResultSet rs = null;
    		int affectedRow = 0;
    		
    		try {
    			conn = ConnectionFactory.getConnection();
    			st = conn.prepareStatement("delete from student where studentNo=?");
    			
    			st.setString(1,studentNo);
    			
    			
    			affectedRow = st.executeUpdate();
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			ConnectionFactory.closeAll(rs, st, conn);
    		}
    		return affectedRow;
    	
    	}
    
    	
    	@Override
    	public int update(String studentNo, String name, int age, String sex) {
    		// TODO Auto-generated method stub
    		Connection conn = null;
    		PreparedStatement st = null;
    		ResultSet rs = null;
    		int affectedRow = 0;
    		
    		try {
    			conn = ConnectionFactory.getConnection();
    			st = conn.prepareStatement("update student set name='"+name+"',age='"+age+"',sex='"+sex+"' where studentNo='"+studentNo+"'");
    			affectedRow = st.executeUpdate();
    			if(affectedRow>0) {
    				System.out.println("更新成功");
    			}else {
    				System.out.println("更新失败");
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			ConnectionFactory.closeAll(rs, st, conn);
    		}
    		return affectedRow;
    }
    }

     

  •  4.   实体类,储存和传递数据
  • package com.xintouyun.sm.entity;
    
    public class Student {
    	private String name;
    	private String num;
    	private int age;
    	private String sex;
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getNum() {
    		return num;
    	}
    	public void setNum(String num) {
    		this.num = num;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	public String getSex() {
    		return sex;
    	}
    	public void setSex(String sex) {
    		this.sex = sex;
    	}
    }
    

    这样我们第一层,数据访问层就搭建好了,我们可以通过数据访问层与数据库进行连接。

四、创建业务逻辑层(Business Logic Layer)

1.业务层接口,定义业务方法

package com.xintouyun.sm.service;

import com.xintouyun.sm.entity.Student;
/**
 * 
 * @author Jianghaoqiang
 *
 */
public interface MangerStore {
	/**
	 *添加学生方法
	 * @param student 对象为学生对象
	 * @return 添加成功返回true,添加失败返回false
	 */
	boolean addStudent(Student student);
	/**
	 * 查找学生方法
	 * @param studentNo 根据学生学号查找
	 * @return 查找成功返回这个学生对象,查找失败返回null
	 */
	Student findStudent(String studentNo);
	/**
	 * 删除学生方法
	 * @param studentNo 根据学生学号进行查找,然后删除
	 * @return 删除成功返回true,删除失败返回false
	 */
	boolean deleteStudent(String studentNo);
	/**
	 * 修改学生信息方法
	 * @param studentNo 根据学生学号查找,然后修改信息
	 * @return 修改成功返回学生对象,修改失败返回null
	 */
	Student updateStudent(String studentNo,String name,String sex,int age);
	/**
	 * 显示所有学生信息,包括姓名,学号,性别,年龄。
	 */
	void showAll();
	
}

2.业务层方法实现类

package com.xintouyun.sm.service.impl;
import java.util.Iterator;
import com.xintouyun.sm.dao.StudentDao;
import com.xintouyun.sm.dao.impl.StudentDaoImpl;
import com.xintouyun.sm.entity.Student;
import com.xintouyun.sm.service.MangerStore;

public class impl4 implements MangerStore{
private StudentDao studentDao = new StudentDaoImpl();
	
	public boolean addStudent(Student student) {
		return studentDao.save(student) > 0 ;
	}

	public Student findStudent(String studentNo) {
		return studentDao.queryStudentBySno(studentNo);
	}

	public boolean deleteStudent(String studentNo) {
		Student existStudent = findStudent(studentNo);
		if(existStudent!=null) {
			return studentDao.delete(studentNo) > 0;
		}
		return false;
	}

	public void showAll() {
		Iterator <Student> it = studentDao.queryAll().iterator();
		System.out.println("学号\t姓名\t年龄\t性别");
		while(it.hasNext()) {
			Student student = it.next();
			System.out.println(student.getNum()+"\t"+student.getName()+"\t"+student.getAge()+"\t"+student.getSex());
		}
	}

	@Override
	public Student updateStudent(String studentNo, String name, String sex, int age) {
		// TODO Auto-generated method stub
		Student existStudent=findStudent(studentNo);
		if(existStudent!=null) {
			studentDao.update(studentNo, name, age, sex);
		}
		return null;
	}
}

 六、.创建界面层(User Interface layer)

创建客户端与用户进行交互:

package com.xintouyun.sm;
import java.util.Scanner;
import com.xintouyun.sm.entity.Student;
import com.xintouyun.sm.service.impl.impl4;

public class Client {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		impl4 data=new impl4();
		String nextor="y";
		System.out.println("-----------------欢迎使用学生管理系统-------------------");
		do { 
			Scanner sc=new Scanner(System.in);
			System.out.println("1.添加2.查找3.删除4.修改5.显示"); 
		int i=0;
		try {
		i=sc.nextInt();
		switch(i) {
		case 1:
			//Student s=new Student();
			System.out.println("请输入学生学号");
			String id=sc.next();
			System.out.println("请输入学生年龄");
			int age=sc.nextInt();
			System.out.println("请输入学生姓名");
			String name=sc.next();
			System.out.println("请输入学生性别");
			String sex=sc.next();
			Student student=new Student();
			student.setAge(age);
			student.setName(name);
			student.setNum(id);
			student.setSex(sex);
			boolean result=data.addStudent(student);
			if(result) {
				System.out.println("添加成功");
				data.showAll();
			}else {
				System.out.println("添加失败");
			}
			break;
		case 2:
			System.out.println("请输入要查找的学生学号");
			id=sc.next();
			Student existStudent=data.findStudent(id);
			if(existStudent!=null) {
			System.out.println("查找到学生信息如下");
			System.out.println(existStudent.getAge()+"\t"+existStudent.getName()+"\t"+existStudent.getNum()+"\t"+existStudent.getSex());
			}else {
			System.out.println("未查找到相关信息");
			}
		break;
			
		case 3:
			System.out.println("请输入要删除的学生学号");
			id=sc.next();
			result=data.deleteStudent(id);
			if(result) {
				System.out.println("删除成功");
				data.showAll();
			}else {
				System.out.println("删除失败");
			}
			break;
			
		case 4:
			System.out.println("请输入要更新的学生学号");
			id=sc.next();
				System.out.println("请输入要更新的学生姓名");
				String name1=sc.next();
				System.out.println("请输入要更新的学生年龄");
				int age1=sc.nextInt();
				System.out.println("请输入要更新的学生性别");
				String sex1=sc.next();
				data.updateStudent(id, name1, sex1, age1);
			break;
		case 5:
			data.showAll();
			break;
		
		}System.out.println("是否继续y/n");
			nextor=sc.next();
		}catch (Exception e) {
		}
	}while(nextor.equalsIgnoreCase("y"));
}
}

 七、进行测试:

 这里因为我的数据库中不是空的,我之前添加过数据,如果是第一次建立,数据库还是空的,要先添加几个学生,再进行其他几项操作,不然系统会出错。

这是我之前数据库中存放的五个学生对象,下面我们测试1.添加

 好了添加功能测试完毕,测试2.查找:

 查找功能测试完毕,我们来测试3.删除:

 删除功能测试完毕,我们来测试4修改:

好了,这样我们的学生管理系统基本功能就实现了。

展开阅读全文

没有更多推荐了,返回首页