Java连接MySQL实现简易学生信息管理系统

1.导入jar包

  1. 鼠标右键点击项目,选择Properties。Properties
  2. 进入Java Build Path选项。Java Build Path
  3. .点击Add External JAR。导入Java连接数据库的jar包。如果没有请戳这里下载。Add External JAR

2.创建数据库和表

  1. 如果没有MySQL基础的朋友强烈建议先去学一下MySQL。 戳这里。
  2. 建立数据库tb_student,命令行示例如下。建立数据库命令行
  3. 建立学生表,命令行示例如下。
    建立学生表

3.Java连接数据库实现需求

  1. 编写连接数据库的bean。代码如下。
package bean;

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

/**
 * 
 * @author XinghaiLiao
 *
 */
public class ConnectionBean {
	/**
	 * 获取数据库连接
	 * @param con
	 * @return 已连接的connection实例
	 */
	public Connection getConnection(Connection con) {
		try {	
			String user = "root";//这里改成你的用户名
			String password = "password";//这里改成你的密码
			Class.forName("com.mysql.cj.jdbc.Driver");
			//localhost是本机的意思 你也可以改成你想要连接的主机的IP地址 这里用db_student数据库
			con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_student?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8", user, password);
			System.out.println("连接数据库成功!");
		} catch(ClassNotFoundException e1) {
			System.out.println("驱动出错!");
		} catch (SQLException e) {
			System.out.println("连接失败!");
			e.printStackTrace();
		}
		return con;
	}
	
	/**
	 * 关闭数据库连接
	 * @param con
	 */
	public void closeConnection(Connection con) {
		if(con != null) {
			try {
				con.close();
				System.out.println("关闭连接成功!");
			} catch (SQLException e) {
				System.out.println("关闭连接失败!");
			}
		}
	}
}
  1. 编写工具类。代码如下。
package util;

import java.util.regex.Pattern;

/**
 * 
 * @author XinghaiLiao
 *
 */
public class Utils {
	
	/**
	 * 判断一个字符串是否为纯数字
	 * @param str 待判断的字符串
	 * @return
	 */
	public static boolean isAllNumber(String str) {
		return (Pattern.compile("[0-9]*")).matcher(str).matches();
	}
}

  1. 编写主界面。我设计的主界面如下图,主界面布局使用BorderLayout。北边是一个JPanel,里面有个JLabel。西边是一个JPanel,里面有三个JButton,每个JButton设置相应事件,这个JLabel使用的布局是GridLayout。中间是一个JPanel,用于显示信息。代码如下。
    主界面
package main;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 * 
 * @author XinghaiLiao
 *
 */
public class SIMSFrame extends JFrame {
	private JButton btn_viewStuList;
	private JButton btn_addStu;
	private JButton btn_findStu;
	private JPanel showPanel;
	private JPanel btnsPanel;
	private JPanel northPanel;
	private JLabel label;
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public SIMSFrame() {
		this.setTitle("简易学生信息管理系统");
		this.setSize(new Dimension(600, 600));
		this.setLocationByPlatform(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		btn_viewStuList = new JButton("学生列表");
		btn_viewStuList.addActionListener(event -> {
			showPanel.setVisible(false);
			showPanel.removeAll();
			showPanel.add(new StuListView(), "Center");
			showPanel.setVisible(true);
		});
		
		btn_addStu = new JButton("添加学生");
		btn_addStu.addActionListener(event -> {
			showPanel.setVisible(false);
			showPanel.removeAll();
			showPanel.add(new AddStuView(), "Center");
			showPanel.setVisible(true);
		});
		
		btn_findStu = new JButton("查找学生");
		btn_findStu.addActionListener(event -> {
			showPanel.setVisible(false);
			showPanel.removeAll();
			showPanel.add(new FindStuView(), "Center");
			showPanel.setVisible(true);
		});
		
		Container c = this.getContentPane();
		c.setLayout(new BorderLayout());
		
		btnsPanel = new JPanel();
		btnsPanel.setLayout(new GridLayout(5, 1));
		btnsPanel.setBackground(Color.white);
		btnsPanel.add(btn_viewStuList);
		btnsPanel.add(btn_addStu);
		btnsPanel.add(btn_findStu);
		c.add(btnsPanel, "West");
		
		northPanel = new JPanel();
		label = new JLabel("学生信息管理系统");
		label.setFont(new Font("华文行楷", 1, 30));
		label.setBackground(Color.RED);
		northPanel.add(label, JLabel.CENTER);
		northPanel.setBackground(Color.DARK_GRAY);
		
		showPanel = new JPanel();
		c.add(showPanel, "Center");
		c.add(northPanel, "North");
		
		this.setVisible(true);
	}
}
  1. 编写查看学生列表的界面,效果如下图。这个类继承自JPanel,里面用一个表格来显示学生信息。触发点击事件后直接把这个new一个加到主界面的信息展示窗口即可。代码如下。
    学生列表效果
package main;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

import bean.ConnectionBean;

/**
 1. 用来显示学生列表
 2. @author XinghaiLiao
 3.  */
public class StuListView extends JPanel {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Connection conn;
	private Statement stmt;
	private ResultSet rs;
	private JTable stuList;
	
	public StuListView() {
		ConnectionBean connection = new ConnectionBean();
		conn = connection.getConnection(conn);
		try {
			stmt = conn.createStatement();
			String sql = "select * from tb_student";
			rs = stmt.executeQuery(sql);
			String[] title = {"学号", "姓名", "电话"};
			rs.last();
			int stuNum = rs.getRow();
			if(stuNum == 0) {
				JOptionPane.showMessageDialog(this, "你查询的表为空!", "系统提示", JOptionPane.WARNING_MESSAGE);
			} else {
				rs.beforeFirst();
				String[][] ob = new String[stuNum][3];
				for(int i = 0; i < stuNum && rs.next(); i++) {
					ob[i][0] = rs.getString("id");
					ob[i][1] = rs.getString("name");
					ob[i][2] = rs.getString("phone");
				}
				stuList = new JTable(ob, title);
				stuList.setSize(new Dimension(600, 600));
				JScrollPane jsp = new JScrollPane(stuList);
				DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();
				tcr.setHorizontalAlignment(JLabel.CENTER);
				stuList.setDefaultRenderer(Object.class, tcr);
				jsp.setPreferredSize(new Dimension(stuList.getWidth()-200, stuList.getHeight()-200));
				this.setLayout(new BorderLayout());
				this.add(jsp, "Center");
				this.setVisible(true);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if(conn!=null) {
				connection.closeConnection(conn);
			}
		}
	}
}
  1. 编写添加学生信息界面,效果如图。这个类和前面的类似,在此不再重复。代码如下。
    添加学生界面
package main;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import bean.ConnectionBean;
import util.Utils;

/**
 * 添加学生界面
 * @author XinghaiLiao
 *
 */
public class AddStuView extends JPanel {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JTextField input_id;
	private JTextField input_name;
	private JTextField input_phone;
	private JLabel id;
	private JLabel name;
	private JLabel phone;
	private JButton btn_OK;
	ConnectionBean connection;
	Connection conn;
	
	public AddStuView() {
		id = new JLabel("学号:");
		name = new JLabel("姓名:");
		phone = new JLabel("电话:");
		
		input_id = new JTextField(10);
		input_name = new JTextField(15);
		input_phone = new JTextField(11);
		
		this.setLayout(new BorderLayout());
		
		JPanel panel = new JPanel();
		panel.setLayout(new GridLayout(3, 2));
		panel.add(id);
		panel.add(input_id);
		panel.add(name);
		panel.add(input_name);
		panel.add(phone);
		panel.add(input_phone);
		
		this.add(panel, "North");
		
		btn_OK = new JButton("提交");
		
		btn_OK.addActionListener(event -> {
			String id = input_id.getText().trim();
			String name = input_name.getText().trim();
			String phone = input_phone.getText().trim();
			
			if(!id.equals("") && !name.equals("") && !phone.equals("")) {
				if(Utils.isAllNumber(id) && Utils.isAllNumber(phone)) {
					conn = null;
					connection = new ConnectionBean();
					conn = connection.getConnection(conn);
					String sql = "insert into tb_student(id, name, phone) values " + "(" +  id + ", " + "\'" + name  + "\'" + ", " + phone + ")";
					try {
						Statement stmt = conn.createStatement();
						stmt.executeUpdate(sql);
						JOptionPane.showMessageDialog(AddStuView.this, "添加成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} finally {
						if(conn != null) {
							connection.closeConnection(conn);
						}
					}
				} else {
					JOptionPane.showMessageDialog(AddStuView.this, "学号或电话号码非法!", "错误", JOptionPane.ERROR_MESSAGE);
				}
			} else {
				JOptionPane.showMessageDialog(AddStuView.this, "请把信息填写完整!", "错误", JOptionPane.ERROR_MESSAGE);
			} 
		});
		
		this.add(btn_OK, "Center");
		this.setVisible(true);
	}
}

  1. 编写查找学生界面。这个界面比较简单,在此直接给出代码。
package main;

import java.awt.GridLayout;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import bean.ConnectionBean;
import util.Utils;

/**
 * 查找学生
 * @author XinghaiLiao
 *
 */
public class FindStuView extends JPanel {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JLabel id;
	private JButton btn_OK;
	private JTextField input_id;
	ConnectionBean connection;
	Connection conn;
	
	public FindStuView() {
		id = new JLabel("学号:");
		btn_OK = new JButton("查找");
		input_id = new JTextField(10);
		
		JPanel panel = new JPanel();
		panel.setLayout(new GridLayout(1, 2));
		panel.add(id);
		panel.add(input_id);
		
		this.setLayout(new GridLayout(2, 1));
		this.add(panel);
		this.add(btn_OK);
		
		btn_OK.addActionListener(event -> {
			String id = input_id.getText();
			if(!id.equals("")) {
				if(Utils.isAllNumber(id)) {
					connection = new ConnectionBean();
					conn = connection.getConnection(conn);
					try {
						Statement stmt = conn.createStatement();
						String sql = "select * from tb_student where id = " + id;
						ResultSet rs = stmt.executeQuery(sql);
						rs.last();
						int k = rs.getRow();
						if(k == 0) {
							JOptionPane.showMessageDialog(this, "没有学号为" + id + "的学生!", "系统提示", JOptionPane.WARNING_MESSAGE);
						} else {
							String name = rs.getString("name");
							String phone = rs.getString("phone");
							JOptionPane.showMessageDialog(this, "学号:" + id + "\n姓名:" + name + "\n电话:" + phone, "系统提示", JOptionPane.INFORMATION_MESSAGE);
						}
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} finally {
						if(conn != null) {
							connection.closeConnection(conn);
						}
					}
				} else {
					JOptionPane.showMessageDialog(this, "学号非法!", "系统提示", JOptionPane.ERROR_MESSAGE);
				}
			} else {
				JOptionPane.showMessageDialog(this, "学号不能为空!", "系统提示", JOptionPane.ERROR_MESSAGE);
			}
		});
	}
}
  1. 编写启动类。代码如下。
package main;

public class SIMS {
	public static void main(String[] args) {
		new SIMSFrame();
	}
}

4.总结

  1. 若有不正确的地方希望大家指出o(╥﹏╥)o
  2. 学数据库时的课程设计做了这个(但是当初没有想过写),这里就给大家简单分享一下我的思路QuQ。
  3. 大家可以自己试着加更多的功能然后美化一下界面。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值