简易Java学生管理系统Swing+MySql

功能演示

代码

AddStudentGUI 类
package com.nicebao.gui;

import com.nicebao.info.Student;
import com.nicebao.jdbc.StudentDAO;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;

public class AddStudentGUI extends JFrame {
	private JTextField studentIdField, nameField, genderField, birthdateField, addressField, phoneNumberField;
	private JRadioButton maleRadioButton, femaleRadioButton;
	public AddStudentGUI() {
		setTitle("学生-新增");
		setSize(400, 400);
		setLocationRelativeTo(null);
		JPanel panel = new JPanel(new GridLayout(7, 2));

		JLabel studentIdLabel = new JLabel("学号:");
		studentIdField = new JTextField();
		panel.add(studentIdLabel);
		panel.add(studentIdField);

		JLabel nameLabel = new JLabel("姓名:");
		nameField = new JTextField();
		panel.add(nameLabel);
		panel.add(nameField);

		// 创建单选按钮组
		JLabel genderLabel = new JLabel("性别:");
		ButtonGroup genderGroup = new ButtonGroup();
		//添加男女的选项
		JPanel genderPanel = new JPanel(new GridLayout(1, 2));
		maleRadioButton = new JRadioButton("男");
		femaleRadioButton = new JRadioButton("女");

		genderGroup.add(maleRadioButton);
		genderGroup.add(femaleRadioButton);

		genderPanel.add(maleRadioButton);
		genderPanel.add(femaleRadioButton);

		panel.add(genderLabel);
		panel.add(genderPanel); // 将性别选项添加到主面板中

		JLabel birthdateLabel = new JLabel("生日:(输入格式 -> 年/月/日)");
		birthdateField = new JTextField();
		panel.add(birthdateLabel);
		panel.add(birthdateField);

		JLabel addressLabel = new JLabel("住址:");
		addressField = new JTextField();
		panel.add(addressLabel);
		panel.add(addressField);

		JLabel phoneNumberLabel = new JLabel("手机号:");
		phoneNumberField = new JTextField();
		panel.add(phoneNumberLabel);
		panel.add(phoneNumberField);

		JButton confirmBtn = getjButton();

		JButton cancelBtn = new JButton("取消");
		cancelBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				dispose(); // 关闭窗口
			}
		});
		panel.add(confirmBtn);
		panel.add(cancelBtn);
		add(panel);
	}

	private JButton getjButton() {
		JButton confirmBtn = new JButton("提交");
		confirmBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				StudentDAO studentDAO = new StudentDAO();
				// 获取用户输入的信息

				//处理学号非数字问题
				long studentId;
				if(studentDAO.isNumber(studentIdField.getText())){
					 studentId = Long.parseLong(studentIdField.getText());
				}else{
					JOptionPane.showMessageDialog(null, "学号只可输入数字", "错误", JOptionPane.ERROR_MESSAGE);
					return;
				}

				String name = nameField.getText();
				String gender ;
				if (maleRadioButton.isSelected()) {
					gender = "男";
				} else if (femaleRadioButton.isSelected()) {
					gender = "女";
				} else {
					gender = "";
				}

				//处理日期格式错误输入问题
				String birthdate = Student.fixBirthdate(birthdateField.getText());

				String address = addressField.getText();
				String phoneNumber = phoneNumberField.getText();

				// 创建学生对象
				Student student = new Student(studentId, name, gender, birthdate, address, phoneNumber);

				// 调用StudentDAO来添加学生信息到数据库
				try {
					studentDAO.addStudent(student);
				} catch (SQLException ex) {
					throw new RuntimeException(ex);
				}
				JOptionPane.showMessageDialog(null, "添加成功");
				// 清空文本框
				studentIdField.setText("");
				nameField.setText("");
				birthdateField.setText("");
				addressField.setText("");
				phoneNumberField.setText("");
			}
		});
		return confirmBtn;
	}


}
MainGUI类

 

package com.nicebao.gui;
import com.nicebao.jdbc.StudentDAO;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;


/**
 * @author IhaveBB
 */
public class MainGUI extends JFrame {
	private StudentDAO studentDAO;
	private JLabel timeLabel;
	private JButton addStudentBtn;
	private JButton manageStudentBtn;
	private JButton exportBtn;
	private JButton importBtn;
	private JLabel info;

	public MainGUI() {
		setTitle("学生管理系统");
		setSize(500, 300);
		setLocationRelativeTo(null);
		getContentPane().setBackground(Color.LIGHT_GRAY);
		JPanel panel = new JPanel(new GridLayout(3, 2, 5, 5));
		//存放时间面板
		timeLabel = new JLabel();
		info = new JLabel();
		info.setText("欢迎您登陆本系统,当前时间为");
		//计时器
		Timer timer = new Timer(1000,new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				SimpleDateFormat timeFormat = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss");
				Date curTime = new Date();
				String formattedTime = timeFormat.format(curTime);
				timeLabel.setText(formattedTime);
			}
		});
		timer.start();

		addStudentBtn = new JButton("添加学生");
		addStudentBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				AddStudentGUI addStudentGUI = new AddStudentGUI();
				addStudentGUI.setVisible(true);
			}
		});

		manageStudentBtn = new JButton("管理学生");
		manageStudentBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				NewViewStudentGUI viewStudentGUI = new NewViewStudentGUI();
			}
		});

		importBtn = new JButton("导入学生");
		importBtn.addActionListener(e -> {
			studentDAO = new StudentDAO();

			JFileChooser fileChooser = new JFileChooser();
			fileChooser.setDialogTitle("选择 CSV 文件");
			//弹出“打开文件”文件选择器对话框
			int userSelection = fileChooser.showOpenDialog(null);
			//JFileChooser.APPROVE_OPTION 选中
			//JFileChooser.CANCEL_OPTION  取消
			//...
			if (userSelection == JFileChooser.APPROVE_OPTION) {
				java.io.File fileToImport = fileChooser.getSelectedFile();

				try {
					studentDAO.importStudent(fileToImport);
				} catch (FileNotFoundException ex) {
					throw new RuntimeException(ex);
				} catch (SQLException ex) {
					throw new RuntimeException(ex);
				}

			}
		});

		exportBtn = new JButton("导出学生");
		exportBtn.addActionListener(e -> {
			studentDAO = new StudentDAO();
			try {
				studentDAO.exportStudents();
			} catch (SQLException | IOException ex) {
				throw new RuntimeException(ex);
			}
		});

		panel.add(addStudentBtn);
		panel.add(manageStudentBtn);
		panel.add(importBtn);
		panel.add(exportBtn);
		panel.add(info);
		panel.add(timeLabel); // 将时间显示添加到界面底部
		//  界面的字体
		setMyFront("宋体",Font.BOLD,15);
		add(panel);
	}
	public static void main(String[] args) throws SQLException {
		new MainGUI().setVisible(true);
	}

	/** @description: 更改本界面字体样式
			* @param: 字体名称eg“宋体”,字体样式,粗,普通,斜体....,字体大小
			* @return: void
			* @author: IhaveBB
			* @date: 2023/12/10
			*/
	public void setMyFront(String frontName,int fontStyle,int size){
		Font newFont = new Font(frontName,fontStyle,size);
		timeLabel.setFont(newFont);
		addStudentBtn.setFont(newFont);
		manageStudentBtn.setFont(newFont);
		importBtn.setFont(newFont);
		exportBtn.setFont(newFont);
		info.setFont(newFont);
	}
}

 NewViewStudentGUI 类
package com.nicebao.gui;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

import com.nicebao.info.Student;
import com.nicebao.jdbc.StudentDAO;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class NewViewStudentGUI extends JFrame {
	private JTextField searchField;
	private JTable studentTable;
	private DefaultTableModel tableModel;
	private StudentDAO studentDAO;

	public NewViewStudentGUI() {
		setTitle("学生管理");
		setSize(600, 400);
		setLocationRelativeTo(null);
		studentDAO = new StudentDAO();

		JPanel panel = new JPanel(new BorderLayout());

		//给搜索区域放到一个流面板中
		JPanel searchPanel = new JPanel(new FlowLayout());
		JLabel searchLabel = new JLabel("输入学生姓名或学号:");
		searchField = new JTextField(15);
		JButton searchBtn = new JButton("搜索");
		searchBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				String searchInput = searchField.getText();
				try {
					List<Student> students = new ArrayList<Student>();
					// 检查是否有输入内容,若没有则查询所有学生信息
					if (searchInput.isEmpty()) {
						students = studentDAO.getAllStudent();
					} else {
						students = studentDAO.searchStudent(searchInput);
					}
					displayStudents(students);
				} catch (SQLException ex) {
					ex.printStackTrace();
				}
			}
		});

		searchPanel.add(searchLabel);
		searchPanel.add(searchField);
		searchPanel.add(searchBtn);


		tableModel = new DefaultTableModel();
		studentTable = new JTable(tableModel);
		JScrollPane scrollPane = new JScrollPane(studentTable);
		tableModel.setColumnIdentifiers(new String[]{"学号", "姓名", "性别", "生日", "住址", "手机号"});
		panel.add(searchPanel, BorderLayout.NORTH);
		panel.add(scrollPane, BorderLayout.CENTER);

//=============================================修改和删除区域======================================================
		// 添加修改和删除按钮
		JButton modifyBtn = new JButton("修改");
		JButton deleteBtn = new JButton("删除");

		// 存放按钮
		JPanel buttonPanel = new JPanel(new FlowLayout());
		buttonPanel.add(modifyBtn);
		buttonPanel.add(deleteBtn);
		panel.add(buttonPanel, BorderLayout.SOUTH);


		modifyBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				int selectedRow = studentTable.getSelectedRow();
				if(selectedRow == -1){
					JOptionPane.showMessageDialog(NewViewStudentGUI.this, "请选择要修改的行!");
				}else{
					// 获取选中行的数据,作为编辑区的默认数据
					long studentId = (long) studentTable.getValueAt(selectedRow, 0);
					String name = (String) studentTable.getValueAt(selectedRow, 1);
					//修改信息时,此处性别故意设置为输入框:),-\‘ ’/-
					String gender = (String) studentTable.getValueAt(selectedRow, 2);
					String birthdate = (String) studentTable.getValueAt(selectedRow, 3);

					String address = (String) studentTable.getValueAt(selectedRow, 4);
					String phoneNumber = (String) studentTable.getValueAt(selectedRow, 5);

					// 创建一个新的对话框来编辑数据
					JFrame editFrame = new JFrame("编辑学生信息");
					editFrame.setLocationRelativeTo(NewViewStudentGUI.this);
					JPanel editPanel = new JPanel(new GridLayout(7, 2));

					JLabel idLabel = new JLabel("学号:");
					JTextField idField = new JTextField(String.valueOf(studentId));
					//这里设置学号不可变!
					idField.setEditable(false);

					JLabel nameLabel = new JLabel("姓名:");
					JTextField nameField = new JTextField(name);

					JLabel genderLabel = new JLabel("性别:");
					JTextField genderField = new JTextField(gender);

					JLabel birthLabel = new JLabel("生日:");
					JTextField birthField = new JTextField(birthdate);

					JLabel addressLabel = new JLabel("住址:");
					JTextField addressField = new JTextField(address);

					JLabel phoneLabel = new JLabel("手机号:");
					JTextField phoneField = new JTextField(phoneNumber);

					JButton updateButton = new JButton("完成");
					updateButton.addActionListener(new ActionListener() {
						@Override
						public void actionPerformed(ActionEvent e) {


							// 获取编辑后的新数据
							String updatedName = nameField.getText();
							String updatedGender = genderField.getText();

							//处理日期格式错误输入问题
							StudentDAO studentDAO = new StudentDAO();
							String updatedBirthdate = Student.fixBirthdate(birthField.getText());

							String updatedAddress = addressField.getText();
							String updatedPhone = phoneField.getText();

							// 更新表格中的数据(还可以不更新,直接再调用一次查询语句即可)
							studentTable.setValueAt(updatedName, selectedRow, 1);
							studentTable.setValueAt(updatedGender, selectedRow, 2);
							studentTable.setValueAt(updatedBirthdate, selectedRow, 3);
							studentTable.setValueAt(updatedAddress, selectedRow, 4);
							studentTable.setValueAt(updatedPhone, selectedRow, 5);

							//更新数据库汇总的数据
							Student updatedStudent = new Student(studentId, updatedName, updatedGender, updatedBirthdate, updatedAddress, updatedPhone);
							try {
								studentDAO.updateStudent(updatedStudent);
							} catch (SQLException ex) {
								throw new RuntimeException(ex);
							}
							editFrame.dispose();
						}
					});

					JButton cancelButton = new JButton("取消");
					cancelButton.addActionListener(new ActionListener() {
						@Override
						public void actionPerformed(ActionEvent e) {
							editFrame.dispose(); // 取消编辑并关闭编辑框
						}
					});
					// 将编辑组件添加到面板中
					editPanel.add(idLabel);
					editPanel.add(idField);
					editPanel.add(nameLabel);
					editPanel.add(nameField);
					editPanel.add(genderLabel);
					editPanel.add(genderField);
					editPanel.add(birthLabel);
					editPanel.add(birthField);
					editPanel.add(addressLabel);
					editPanel.add(addressField);
					editPanel.add(phoneLabel);
					editPanel.add(phoneField);
					editPanel.add(updateButton);
					editPanel.add(cancelButton);
					editFrame.add(editPanel);
					editFrame.setSize(400, 300);
					editFrame.setVisible(true);
				}
			}
		});



		//“删除”按钮动作
		deleteBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				//选中删除行
				int selectedRow = studentTable.getSelectedRow();
				if(selectedRow == -1){
					JOptionPane.showMessageDialog(NewViewStudentGUI.this, "请选择要删除的行!");
				}else{
					int confirmDialog = JOptionPane.showConfirmDialog(NewViewStudentGUI.this, "确定要删除所选行吗?", "确认删除", JOptionPane.YES_NO_OPTION);
					if (confirmDialog == JOptionPane.YES_OPTION) {
						long studentId = (long) studentTable.getValueAt(selectedRow, 0);
						tableModel.removeRow(selectedRow);
						try {
							studentDAO.deleteStudent(studentId);
						} catch (SQLException ex) {
							throw new RuntimeException(ex);
						}

					}
				}
			}
		});

		add(panel);
		setVisible(true);
	}


	/** @description: 将学生信息添加到表格之中
			* @param: List
			* @return: void
			* @author: IhaveBB
			* @date: 2023/11/25
			*/
	private void displayStudents(List<Student> students) {
		tableModel.setRowCount(0); // 清空表格
		for (Student student : students) {
			Object[] rowData = {student.getStudentId(), student.getName(), student.getGender(), student.getBirthdate(), student.getAddress(), student.getPhoneNumber()};
			tableModel.addRow(rowData); // 添加每个学生信息到表格
		}
	}
}
Student类 

 

package com.nicebao.info;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Student {
	/**
	 * 学生类
	 *
	 * @name: Student
	 * @author: IhaveBB
	 * @date: 2023-11-24 21:24
	 **/
	private long studentId;
	private String name;
	private String gender;
	private String birthdate;
	private String address;
	private String phoneNumber;

	// 构造函数、getter、setter、toString
	public Student(){}

	public Student(long studentId, String name, String gender, String birthdate, String address, String phoneNumber) {
		this.studentId = studentId;
		this.name = name;
		this.gender = gender;
		this.birthdate = birthdate;
		this.address = address;
		this.phoneNumber = phoneNumber;
	}

	public long getStudentId() {
		return studentId;
	}

	public void setStudentId(long studentId) {
		this.studentId = studentId;
	}

	public String getName() {
		return name;
	}

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

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public String getBirthdate() {
		return birthdate;
	}

	public void setBirthdate(String birthdate) {
		this.birthdate = birthdate;
	}

	public String getAddress() {
		return address;
	}

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

	public String getPhoneNumber() {
		return phoneNumber;
	}

	public void setPhoneNumber(String phoneNumber) {
		this.phoneNumber = phoneNumber;
	}
	@Override
	public String toString() {
		return "Student{" + "\n" +
				"  学号=" + studentId + "\n" +
				", 姓名='" + name + '\'' + "\n" +
				", 性别='" + gender + '\'' + "\n" +
				", 生日='" + birthdate + '\'' + "\n" +
				", 住址='" + address + '\'' + "\n" +
				", 手机号='" + phoneNumber + '\'' + "\n" +
				'}';
	}
	/** @description: 数据库中生日类为Date,格式要求为yyyy-MM-dd。
	 * 故此方法为判断日期是否符合格式,若不符合则使用默认值,并提示错误,要求用户进行和修改。
	 * @param: String
	 * @return: String
	 * @author: IhaveBB
	 * @date: 2023/11/27
	 */
	public static String fixBirthdate(String birthdate) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
		// 设置严格解析日期
		dateFormat.setLenient(false);
		try {
			Date date = dateFormat.parse(birthdate);
			//正确不进行修改
			return birthdate;
		} catch (ParseException e) {
			System.out.println("生日日期格式日常" + e.getMessage());
			return "1970/01/01";
		}
	}
}

 StudentDAO类
package com.nicebao.jdbc;
import com.nicebao.info.Student;

import javax.swing.*;
import java.io.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class StudentDAO {
	private Connection connection;


	public StudentDAO() {
		try {
			connection = DatabaseConnector.getConnection();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	/** @description: 添加学生信息
	 * @param: void
	 * @return: void
	 * @author: IhaveBB
	 * @date: 2023/11/24
	 */
	public void addStudent(Student student) throws SQLException {
		String query = "INSERT IGNORE INTO students (studentId, name, gender, birthdate, address, phoneNumber) VALUES (?, ?, ?, ?, ?, ?)";
		PreparedStatement preparedStatement = connection.prepareStatement(query);
		preparedStatement.setLong(1, student.getStudentId());
		preparedStatement.setString(2, student.getName());
		preparedStatement.setString(3, student.getGender());
		preparedStatement.setString(4, student.getBirthdate());
		preparedStatement.setString(5, student.getAddress());
		preparedStatement.setString(6, student.getPhoneNumber());
		//执行此PreparedStatement对象中的 SQL 语句
		preparedStatement.executeUpdate();
	}


	/** @description: 查询
	 * @param: String
	 * @return: List
	 * @author: IhaveBB
	 * @date: 2023/11/24
	 */
	public List searchStudent(String string) throws SQLException {
		String studentName;
		long studentId;
		List<Student> students = new ArrayList<Student>();
		//判断输入信息是学号还是姓名?
		if(isNumber(string)){
			studentId = Long.parseLong(string);
			//更新初始值,方便与数据库交互
			studentName = null;
		}else{
			studentName = string;
			//更新初始值,方便与数据库交互
			studentId = -1;
		}
		String query = "SELECT * FROM students WHERE name = ? OR studentId = ?";
		PreparedStatement preparedStatement = connection.prepareStatement(query);
		preparedStatement.setString(1, studentName);
		preparedStatement.setLong(2, studentId);

		//在此 PreparedStatement 对象中执行 SQL 查询,并返回 ResultSet 查询生成的对象。
		//ResultSet表示数据库结果集的数据表,通常通过执行查询数据库的语句来生成。
		ResultSet resultSet = preparedStatement.executeQuery();
		while(resultSet.next()){
			Student student = new Student();
			//从左到右 每列仅可读取一次
			student.setStudentId(resultSet.getLong("studentId"));
			student.setName(resultSet.getString("name"));
			student.setGender(resultSet.getString("gender"));
			student.setBirthdate(resultSet.getString("birthdate"));
			student.setAddress(resultSet.getString("address"));
			student.setPhoneNumber(resultSet.getString("phoneNumber"));
			students.add(student);
		}
		return students;
	}

	/** @description: 通过matches方法判断String类型的数值中,是否只包含数字。
	 * @param: String
	 * @return: boolean
	 * @author: IhaveBB
	 * @date: 2023/11/24
	 */
	public boolean isNumber(String str){
		//记住是反斜杠!
		return str.matches("\\d+");
	}


	/** @description: 查找全部学生信息,然后存放在一个链表中
			* @param: void
			* @return: java.util.List<org.example.Student>
			* @author: IhaveBB
			* @date: 2023/11/25
			*/
	public List<Student> getAllStudent() throws SQLException {
		List<Student> students = new ArrayList<>();
		String query = "SELECT * FROM students";
		PreparedStatement preparedStatement = connection.prepareStatement(query);

		ResultSet resultSet = preparedStatement.executeQuery();
		while (resultSet.next()){
			Student student = new Student();
			student.setStudentId(resultSet.getLong("studentId"));
			student.setName(resultSet.getString("name"));
			student.setGender(resultSet.getString("gender"));
			student.setBirthdate(resultSet.getString("birthdate"));
			student.setAddress(resultSet.getString("address"));
			student.setPhoneNumber(resultSet.getString("phoneNumber"));
			students.add(student);
		}
		return students;
	}
	/** @description: 删除操作
			* @param: long
			* @return: void
			* @author: IhaveBB
			* @date: 2023/11/25
			*/
	public void deleteStudent(long studentId) throws SQLException {
		String query = "DELETE FROM students WHERE studentId = ?";
		try {
			PreparedStatement preparedStatement = connection.prepareStatement(query);
			preparedStatement.setLong(1, studentId);
			preparedStatement.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	/** @description: 更新数据库数据
			* @param: Student
			* @return: void
			* @author: IhaveBB
			* @date: 2023/11/25
			*/
	public void updateStudent(Student student) throws SQLException {
		String query = "UPDATE students SET name = ?, gender = ?, birthdate = ?, address = ?, phoneNumber = ? WHERE studentId = ?";
		PreparedStatement preparedStatement = connection.prepareStatement(query);
		preparedStatement.setString(1, student.getName());
		preparedStatement.setString(2, student.getGender());
		preparedStatement.setString(3, student.getBirthdate());
		preparedStatement.setString(4, student.getAddress());
		preparedStatement.setString(5, student.getPhoneNumber());
		preparedStatement.setLong(6, student.getStudentId());
		preparedStatement.executeUpdate();
	}
	
	/** @description: 导出学生数据,使用CSV格式来存储
			* @param: void
			* @return: void
			* @author: IhaveBB
			* @date: 2023/11/25
			*/
	public void exportStudents() throws SQLException, IOException {
		String query = "select * from students";
		// 创建 CSV 文件并写入数据
		File file = new File("students.csv");
		Writer writer = new FileWriter(new File("students.csv"));
		PreparedStatement preparedStatement = connection.prepareStatement(query);
		ResultSet resultSet = preparedStatement.executeQuery();
		while (resultSet.next()){
			long studentId = resultSet.getLong("studentId");
			String name = resultSet.getString("name");
			String gender = resultSet.getString("gender");
			String birthdate = resultSet.getString("birthdate");
			String address = resultSet.getString("address");
			String phoneNumber = resultSet.getString("phoneNumber");
			writer.write(studentId + "," + name + "," + gender + "," + birthdate + "," + address + "," + phoneNumber + "\n");
		}
		writer.close();
		System.out.println("文件已成功导出");
		String exportPath = file.getAbsolutePath();
		JOptionPane.showMessageDialog(null, "文件已成功导出至:\n" + exportPath);
	}


	/** @description: 导入文件
			* @param: 文件路径
			* @return: void
			* @author: IhaveBB
			* @date: 2023/11/25
			*/
	public void importStudent(java.io.File fileToImport) throws FileNotFoundException, SQLException {
		String insertQuery = "INSERT IGNORE INTO students (studentId, name, gender, birthdate, address, phoneNumber) VALUES (?, ?, ?, ?, ?, ?)";
		PreparedStatement preparedStatement = connection.prepareStatement(insertQuery);

		File file = new File(String.valueOf(fileToImport));
		Scanner scanner = new Scanner(file);

		while (scanner.hasNextLine()){
			String line = scanner.nextLine();
			String[] data = line.split(",");
			long studentId = Long.parseLong(data[0]);
			String name = data[1];
			String gender = data[2];
			String birthdate = data[3];
			String address = data[4];
			String phoneNumber = data[5];

			preparedStatement.setLong(1, studentId);
			preparedStatement.setString(2, name);
			preparedStatement.setString(3, gender);
			preparedStatement.setString(4, birthdate);
			preparedStatement.setString(5, address);
			preparedStatement.setString(6, phoneNumber);
			preparedStatement.executeUpdate();
		}
		System.out.println("CSV文件数据成功导入到数据库!");
	}

}

 DatabaseConnector类
package com.nicebao.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class DatabaseConnector {
/** @description: 连接数据库
		* @param:
		* @return:
		* @author: IhaveBB
		* @date: 2023/11/25
		*/

	private static final String URL = "jdbc:mysql://127.0.0.1:3306/students";
	private static final String USERNAME = "root";
	private static final String PASSWORD = "root";

	public static Connection getConnection() throws SQLException {
		return DriverManager.getConnection(URL, USERNAME, PASSWORD);
	}

	/** @description: 创建用户表
	 * @param: void
	 * @return: void
	 * @author: IhaveBB
	 * @date: 2023/12/6
	 */
	public static void createTable() throws SQLException {
		Connection connection =  getConnection();
		String query =	"CREATE TABLE IF NOT EXISTS students ( studentId BIGINT PRIMARY KEY, name VARCHAR(50) NOT NULL, gender VARCHAR(10) NOT NULL, birthdate DATE, address VARCHAR(100), phoneNumber VARCHAR(15));";
		PreparedStatement preparedStatement = connection.prepareStatement(query);
		preparedStatement.executeUpdate();
	}
}








  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

司徒阿宝

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

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

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

打赏作者

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

抵扣说明:

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

余额充值