小整理-学生管理系统加强版.连接数据库(并通过键盘输入存放学生信息到数据库)

A:在学习了类与对象、I/O流以及现在的数据库之后我们来对学生管理系统进行一个升级加强。从开始的数据没有保存,到学习了File文件过后的保存到文件,我们现在要做的就是将学生信息存放到数据库,并对其进行增删改查操作。

 B:项目名称: 《学生信息管理系统》 英文:StudentManagerSystem 版本号: V1.2 
 * 功能描术:学生信息管理系统具有能对学生信息进行显示,添加,删除,

*更改(根据学号),退出功能. 
 

* 要求:
 *
 * 1>.创建一个学生类Student至少包含:姓名(name)、学号(number)、年龄(age)三个属性; 
 * 2>.在添加,删除学生时要求检查该学生是否存在,如果不存在需给出提示。 
 * 3>.通过输入命令进行交互操作,控制台输出效果如下:
 * 
 * 在Student类中封装操作方法:
 * 
 * A、添加学生 (addStudent)、
 * B、显示学生列表 (showAllStudent)、
 * C、删除学生 (deleteStudent)、
 * D、查找学生 (updateStudentByNumber)、
 * E、退出系统 (exit)

一、连接数据库

package cn.hsz11_2.java1606.DBconnect;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
 * 加载驱动连接数据库类
 * 
 * @author H
 *
 */
public class ConnectionDB {
	
	private static final String URL = "jdbc:mysql://localhost:3306/hsz?useSSL=true"; //?useSSL=true屏蔽安全监测
	private static final String USER = "root"; //用户名
	private static final String PASSWORD = "******"; //密码

	public ConnectionDB() {
		try {
			
			Class.forName("com.mysql.jdbc.Driver"); // 加载mysql驱动
		
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 建立数据库连接
	 */
	public static  Connection getConnection() {
		
		Connection connect = null;
		
		try {
			
			connect = DriverManager.getConnection(URL, USER, PASSWORD);
		
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return connect;
	}

	/**
	 * 关闭数据库连接
	 */
	public static  void closeConnection(Connection connect) {
		try {
			
			if (connect != null)
				connect.close();
		
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}


}
二、创建学生表

package cn.hsz11_2.java1606.DBconnect;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
/**
 * 创建学生表类
 * 
 * @author H
 *
 */
public class StudentTable extends ConnectionDB {
	
	/**
	 * 创建学生表
	 */
	public  void createStudentTable() {
		
		String sql = "create table  student ("
				+ "id int(11) not null auto_increment  primary key," // 主键
				+ "name varchar(10) not null," // 姓名
				+ "number int(10)  not null," // 学号
				+ "age int(3)"+ ")"; // 年龄
			
		
		Connection connect = getConnection();
		Statement statement = null;
		
		try {
			
			statement = connect.createStatement(); // 执行SQL语句
			statement.execute(sql);
		
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			
			try {
				
				if (statement != null)
					statement.close();
			
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
			closeConnection(connect);
		
		}

	}
	
	/**
	 * 键盘输入字符串类型
	 * @return
	 */
	public static String getStringKeyBoard() {

		String name = "";
		BufferedReader br = null;
		InputStreamReader ir = null;

		try {
			ir = new InputStreamReader(System.in); // 字节 - > 字符
			br = new BufferedReader(ir); // 字符 - > 字符缓冲
			name = br.readLine();

		} catch (IOException e) {
			e.printStackTrace();
		} catch (NumberFormatException n) {
			System.out.println("输入格式错误,请重新输入 :");
		}
		return name;
	}

	/**
	 * 键盘输入 整型
	 * 
	 * @return
	 */
	public static int getIntKeyBoard() {
		BufferedReader br = null;
		InputStreamReader ir = null;
		for (;;) {
			try {
				ir = new InputStreamReader(System.in); // 字节 - > 字符
				br = new BufferedReader(ir);
				String line = br.readLine();
				if (line == "")
					break;
				return Integer.parseInt(line);// 字符 - > 字符缓冲
			} catch (IOException e) {
				e.printStackTrace();
			} catch (NumberFormatException n) {
				System.out.println("输入格式错误,请重新输入 :");

			}
		}
		return 0;
	}

}
三、创建学生类

package cn.hsz11_2.java1606.DBconnect;

import java.io.File;

/**
 * 学生类
 * 
 * @author H
 *
 */
public class Student {
	
	private static String name; //姓名
	private static int number; //学号
	private static int age; //年龄

	public Student(String name,int number,int age) {
		this.name = name;
		this.number = number;
		this.age = age;

	}

	public String getName() {
		return name;
	}

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

	public int getNumber() {
		return number;
	}

	public void setNumber(int number) {
		this.number = number;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
	/**
	 * 1、 添加学生
	 */
	public static void addStudent() {// 添加学生
		Student student = new Student( name,number,age );//实例化一个学生对象
		
		System.out.println("请输入姓名:");
		student.name = StudentTable.getStringKeyBoard();
		
		System.out.println("请输入学号:");
		student.number = StudentTable.getIntKeyBoard();
		
		System.out.println("请输入年龄:");
		student.age = StudentTable.getIntKeyBoard();
		
		StudentDB db = new StudentDB();
		db.addStudent(student);
		
	}
	
	/**
	 * 2、显示学生
	 */
	public static void showAllStudent() {// 显示学生列表
		//System.err.println("\t姓名:\t学号: \t年龄: \t");
		StudentDB.selectStudent();
	}
	

	/**
	 * 3、删除学生
	 */
	public static void deleteStudent() {// 删除学生
		System.err.println("\t执行删除学生信息操作\t");
		System.out.println("请输入学生姓名:");
		String  name = StudentTable.getStringKeyBoard();
		StudentDB.deleteStudent(name);
	}
	
	/**
	 * 4、 更改学生
	 */
	public static void updateStudentByNumber() {// 更改学生
		
		System.err.println("\t执行更改学生信息操作\t");
		System.out.println("请输入学生学号:");
		int number = StudentTable.getIntKeyBoard();
		System.out.println("请输入更改的学生姓名:");
		String name = StudentTable.getStringKeyBoard();
		StudentDB.updateStudent(name,number);
	}
	
	/**
	 * 5、退出
	 */

	public static void exit() {
		System.out.println();
	}


}
四、创建学生表的操作工具类

package cn.hsz11_2.java1606.DBconnect;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 操作学生表工具类
 * 
 * @author H
 *
 */
public class StudentDB extends StudentTable{

	
	/**
	 * 1、添加学生
	 */
	public static void addStudent(Student student) {
		
		String sql = "insert into student (name,number,age)values(?,?,?)";
		
		Connection connect = getConnection();
		PreparedStatement ps = null;
		
		try {
			
			ps = connect.prepareStatement(sql); // 执行SQL语句
			
			ps.setString(1, student.getName()); // 添加学生姓名
			ps.setInt(2, student.getNumber()); // 添加学生学号
			ps.setInt(3, student.getAge());   // 添加学生年龄
			
			ps.execute();

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			
			try {
				
				if (ps != null)
					ps.close();
			
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
			closeConnection(connect);
		}
	}
	
	/**
	 * 2、显示学生
	 */
	public static  void selectStudent() {
		
		String sql = "select * from student"; // 显示学生表中的所有信息
		
		Connection connect = getConnection();
		Statement statement = null;
		ResultSet rs = null;
		
		try {
			
			statement = connect.createStatement(); // 执行SQL语句
			rs = statement.executeQuery(sql);
			System.out.println("id" + "\t" + "姓名" + "\t" + "学号" + "\t" + "年龄"+ "\t");
			
			while (rs.next()) {
				
				int id = rs.getInt("id");
				
				String name = rs.getString("name");
				int number = rs.getInt("number");
				int age = rs.getInt("age");
				
				System.err.println(id + "\t" + name + "\t" + number + "\t"+ age + "\t");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			
			try {
				
				if (rs != null)
					rs.close();
				
				if (statement != null)
					statement.close();
			
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
			closeConnection(connect);
		}
	}
	
	/**
	 * 3、删除(根据姓名)
	 */
	public static  void deleteStudent(String name) {
		
		String sql = "delete from student where name = ?"; // 删除学生根据学生姓名
		
		Connection connect = getConnection();
		PreparedStatement ps = null;
		
		try {
			
			ps = connect.prepareStatement(sql); // 执行SQL语句
			ps.setString(1, name);
			ps.execute();
		
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			
			try {
				
				if (ps != null)
					ps.close();
			
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
			closeConnection(connect);
		}
	}
	
	/**
	 * 4、更改学生信息(根据学号)
	 */
//方法一:	
//	public static void updateStudentByName(Student student,String name) {
//		String sql = "UPDATE connect SET number = ? WHERE name = ?";
//		
//		Connection connect = getConnection();
//		PreparedStatement ps = null;
//		
//		try {
//			
//			ps = connect.prepareStatement(sql);
//			ps.setInt(1, student.getNumber());
//			ps.setString(1, name);
//			ps.execute();
//		
//		} catch (SQLException e) {
//			e.printStackTrace();
//		} finally {
//			
//			try {
//				
//				if (ps != null)
//					ps.close();
//			
//			} catch (SQLException e) {
//				e.printStackTrace();
//			}
//			
//			closeConnection(connect);
//		}
//		
//	}
	
	//方法二:
	public  static void updateStudent( String name,int number) {
		
		String sql = "update student set name = ? where number = ?"; // 根据学生学号更改学生姓名
		
		Connection connect = getConnection(); // 建立连接
		PreparedStatement ps = null;
		
		try {
			
			ps = connect.prepareStatement(sql); // 执行SQL语句
			ps.setString(1, name); // 向SQL语句传参数 name
			ps.setInt(2, number); // 向SQL语句传参数 number
			ps.execute(); // 返回值是更新记录条数
		
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			
			try {
				
				if (ps != null)
					ps.close();
			
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
			closeConnection(connect);
		}

	}
	

}
五、学生管理系统界面即测试类

package cn.hsz11_2.java1606.DBconnect;
/**
 * 测试类
 * 即学生管理系统操作界面
 * @author H
 *
 */
public class StudentDBTest {
	
	
	public static final int ADD_STUDENT_CODE	= 1;
	public static final int SHOW_STUDENT_CODE   = 2;
	public static final int DELETE_STUDENT_CODE = 3;
	public static final int UPDATE_STUDENT_CODE = 4;
	public static final int EXIT_STUDENT_CODE 	= 5;

	public static void main(String[] args) {


			System.out.println("======  欢迎进入《学生信息管理系统》! ======");
			System.err.println("1 添加学生,2 显示学生列表,3 删除学生,4 更改学生信息,5 退出");
			System.out.println("<输入操作命令:>");
			
			int code;
			for(;;){//死循环		
			code = StudentTable.getIntKeyBoard();
				switch(code){
				case ADD_STUDENT_CODE:
					Student.addStudent();
					System.out.println("添加学生成功");	
					break;
				case SHOW_STUDENT_CODE:
					Student.showAllStudent();
					System.out.println("显示完毕,以上就是所有学生信息。");
					System.out.println("\t期待您的下次操作\t");
					break;
				case DELETE_STUDENT_CODE:
					Student.deleteStudent();
					System.out.println("\t删除成功,期待您的下次操作\t");
					break;
				case UPDATE_STUDENT_CODE:
					Student.updateStudentByNumber();
					System.out.println("\t期待您的下次操作\t");
					break;
				case EXIT_STUDENT_CODE:
					Student.exit();
					System.out.println("==== 您已经退出《学生信息管理系统》  ====");
					System.exit(0);//退出
					break;
					
				}
				System.err.println("<请继续输入操作命令:1 添加学生,2 显示学生列表,3 删除学生,4 更改学生信息,5 退出>");	
		}
	}

}

小整理-学生管理系统加强版.连接数据库(并通过键盘输入存放学生信息到数据库)_第1张图片


你可能感兴趣的:(Java-裁决之地-项目篇)