目录
1、 创建数据库表
在数据库中创建一个student表,用于存储学生信息。表可以包括学生的学号、姓名、语文成绩、数学成绩、英语成绩、学生密码(默认密码123456)。
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int NOT NULL,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NULL DEFAULT NULL,
`china` int NULL DEFAULT NULL,
`math` int NULL DEFAULT NULL,
`english` int NULL DEFAULT NULL,
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NULL DEFAULT '123456',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_520_ci ROW_FORMAT = Dynamic;
INSERT INTO `student` VALUES (12131231, '1', 12131231, 12131231, 12131231, '131');
INSERT INTO `student` VALUES (123, '123', 123, 123, 123, '123');
INSERT INTO `student` VALUES (1, '321', 1, 1, 1, '1');
效果截图:
2、下载连接数据库驱动
链接:MySQL :: Download MySQL Connector/J (Archived Versions)
选择:
解压出后复制jar文件:
把jar文件粘贴到项目的Java包下,并且右键改jar包点击Add as Library,这样jar链接数据库驱动包就导入好了
3、配置数据库连接
在Java代码中配置数据库连接信息,包括下载jar包、数据库URL、用户名和密码的JDBC连接MySQL。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JOptionPane;
public class StudentDAO {
private static StudentDAO dao=new StudentDAO();
public StudentDAO() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (Exception e) {
// TODO: handle exception
JOptionPane.showMessageDialog(null, "数据库加载失败"+e.getMessage());
}
}
public static Connection getConn()
{
try {
Connection conn=null;
String url="jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false"; //127.0.0.1:3306
conn=DriverManager.getConnection(url,"root","123456");
return conn;
} catch (Exception e) {
// TODO: handle exception
JOptionPane.showMessageDialog(null, "数据库连接失败"+e.getMessage());
return null;
}
}
}
4、创建student实体类
public class Student {
private int id = 0;
private String name = null;
private int china = 0;
private int math = 0;
private int english = 0;
public Student() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getChina() {
return china;
}
public void setChina(int china) {
this.china = china;
}
public int getMath() {
return math;
}
public void setMath(int math) {
this.math = math;
}
public int getEnglish() {
return english;
}
public void setEnglish(int english) {
this.english = english;
}
public Student(int id, String name, int china, int math, int english) {
this.id = id;
this.name = name;
this.china = china;
this.math = math;
this.english = english;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", china=" + china +
", math=" + math +
", english=" + english +
'}';
}
}
5、 实现登录功能
创建登录界面,包括用户名和密码的输入框以及登录提交按钮和注册按钮。
在登录按钮的事件处理程序中,获取用户名和密码。
使用JDBC连接数据库,执行查询语句,检查用户名和密码是否匹配数据库中的记录,不成功会弹出有关错误信息。
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.LayoutManager;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JButton;
import javax.swing.JDialog;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class login {
private JFrame frame;
private JTextField textField;
private JPasswordField passwordField;
private JButton quitBt;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
login window = new login();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public login() {
initialize();
}
private void initialize() {
frame = new JFrame();
frame.setBounds(400, 200, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setResizable(false);
frame.getContentPane().setLayout(null);
JLabel j1=new JLabel("***欢迎登陆学生管理系统***");
j1.setBounds(120, 26, 180, 15);
frame.getContentPane().add(j1);
JLabel lblNewLabel = new JLabel("学号:");
lblNewLabel.setBounds(100, 56, 54, 15);
frame.getContentPane().add(lblNewLabel);
JLabel lblNewLabel_1 = new JLabel("密码:");
lblNewLabel_1.setBounds(100, 102, 54, 15);
frame.getContentPane().add(lblNewLabel_1);
textField = new JTextField();
textField.setBounds(196, 53, 100, 21);
frame.getContentPane().add(textField);
textField.setColumns(10);
passwordField = new JPasswordField();
passwordField.setBounds(196, 96,100, 21);
frame.getContentPane().add(passwordField);
JButton btnNewButton = new JButton("登录");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Connection conn = StudentDAO.getConn();
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn
.prepareStatement("select *from student where id=? and password=?");
ps.setString(1, textField.getText());
ps.setString(2, passwordField.getText());
rs = ps.executeQuery();
if (rs.next()) {
JFrame ssss = new JFrame("学生信息管理系统");
ssss.setLocation(300,100 );
ssss.setSize(850,600 );
ssss.setDefaultCloseOperation(ssss.EXIT_ON_CLOSE);
view studentView = new view();
ssss.add(studentView);
ssss.setVisible(true);
} else {
JOptionPane pane = new JOptionPane("用户或密码错误");
JDialog dialog = pane.createDialog("警告");
dialog.show();
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
btnNewButton.setBounds(100, 170, 93, 23);
frame.getContentPane().add(btnNewButton);
JButton btnNewButton_1 = new JButton("注册");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new register();
frame.removeNotify();
}
});
btnNewButton_1.setBounds(250, 170, 93, 23);
frame.getContentPane().add(btnNewButton_1);
}
private void add(JButton quitBt2) {
// TODO Auto-generated method stub
}
private Container getContentPane() {
// TODO Auto-generated method stub
return null;
}
}
效果截图:
6、 实现注册功能
创建注册界面,包括用户名和密码的输入框以及注册提交按钮和返回按钮。
在登录按钮的事件处理程序中,获取用户名和密码。使用JDBC连接数据库,执行查询语句,检查用户名和密码是否匹配数据库中的记录。
再创建注册成功界面,包括成功注册字样和返回按钮,点击返回就转到登录页面。
注册页面代码:
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class register {
private JFrame frame;
private JTextField textField;
private JTextField textField_1;
public register() {
initialize();
}
private void initialize() {
frame = new JFrame();
frame.setBounds(400, 200, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setResizable(false);
frame.getContentPane().setLayout(null);
frame.setTitle("注册");
JLabel lblNewLabel = new JLabel("学号:");
lblNewLabel.setBounds(100, 56, 54, 15);
frame.getContentPane().add(lblNewLabel);
JLabel lblNewLabel_1 = new JLabel("密码:");
lblNewLabel_1.setBounds(100, 102, 54, 15);
frame.getContentPane().add(lblNewLabel_1);
textField = new JTextField();
textField.setBounds(196, 53, 100, 21);
frame.getContentPane().add(textField);
textField.setColumns(10);
textField_1 = new JTextField();
textField_1.setBounds(196, 96,100, 21);
frame.getContentPane().add(textField_1);
textField_1.setColumns(10);
JButton btnNewButton = new JButton("注册");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Connection conn = StudentDAO.getConn();
PreparedStatement ps = null;
try {
ps = conn
.prepareStatement("insert into student(id,password) values( ?,?)");
ps.setInt(1, Integer.parseInt(textField.getText()));
ps.setString(2, textField_1.getText());
ps.execute();
new sucess();
frame.removeNotify();
// System.out.println("成功");
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
btnNewButton.setBounds(81, 169, 93, 23);
frame.getContentPane().add(btnNewButton);
JButton returnButton = new JButton("返回");
returnButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new login();
frame.removeNotify();
}
});
returnButton.setBounds(223, 169, 93, 23);
frame.getContentPane().add(returnButton);
}
}
注册成功页面代码:
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class sucess {
private JFrame frame;
public sucess() {
initialize();
}
private void initialize() {
frame = new JFrame();
frame.setBounds(400, 200, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.getContentPane().setLayout(null);
JLabel lblNewLabel = new JLabel("注册成功 !");
lblNewLabel.setFont(new Font("宋体", Font.PLAIN, 41));
lblNewLabel.setBounds(77, 51, 215, 46);
frame.getContentPane().add(lblNewLabel);
JButton btnNewButton = new JButton("返回登录");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new login();
frame.removeNotify();
}
});
btnNewButton.setBounds(157, 153, 103, 33);
frame.getContentPane().add(btnNewButton);
}
}
效果截图:
7、实现学生管理功能
创建学生管理界面,包括查询(每次添加、删除和更新都会自动查询全部)、添加、删除和更新学生信息的按钮。
在查询按钮的事件处理程序中,使用JDBC连接数据库,执行查询语句,获取学生信息,并显示在界面上。
在查询按钮的事件处理程序中,直接输出到界面的数据库的内容。
在添加按钮的事件处理程序中,获取用户输入的学生信息,使用JDBC连接数据库,执行插入语句,将学生信息保存到数据库中。
在删除按钮的事件处理程序中,获取用户选择的学生信息,使用JDBC连接数据库,执行删除语句,从数据库中删除学生信息,并且有成功删除弹框信息。
在更新按钮的事件处理程序中,获取用户选择的学生信息和更新后的信息,使用JDBC连接数据库,执行更新语句,更新数据库中的学生信息,并且有成功更新弹框信息。
在清空按钮的事件处理程序中,清空输入框的内容
定义调用数据库数据的方法类的代码:
import javax.swing.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;
public class StudentManage {
public static void insert(Student g)
{
try {
Connection conn=StudentDAO.getConn(); //数据库连接
PreparedStatement ps=conn.prepareStatement("insert into student(id,name,china,math,english) values(?,?,?,?,?)");
ps.setInt(1, g.getId());
ps.setString(2, g.getName());
ps.setInt(3, g.getChina());
ps.setInt(4, g.getMath());
ps.setInt(5, g.getEnglish());
int f=ps.executeUpdate();
if(f>0)
{
JOptionPane.showMessageDialog(null, "成功添加数据");
}
else
{
JOptionPane.showMessageDialog(null, "没有成功插入数据");
}
ps.close();
conn.close();
} catch (Exception e) {
// TODO: handle exception
JOptionPane.showMessageDialog(null, "注意需要不能重复");
}
}
public static void update(Student g)
{
try {
Connection con=StudentDAO.getConn();
PreparedStatement ps=con.prepareStatement("update student set name=?,china=?,math=?,english=? where id=?");
ps.setString(1, g.getName());
ps.setInt(2, g.getChina());
ps.setInt(3, g.getMath());
ps.setInt(4, g.getEnglish());
ps.setInt(5, g.getId());
int f=ps.executeUpdate();
System.out.println(f);
if(f>0)
{
JOptionPane.showMessageDialog(null, "成功更新数据");
}
else
{
JOptionPane.showMessageDialog(null, "没有完美的更新数据");
}
ps.close();
con.close();
} catch (Exception e) {
// TODO: handle exception
JOptionPane.showMessageDialog(null, "没有成功更新数据");
}
}
public static void update(int sale,int id)
{
try {
Connection con=StudentDAO.getConn();
PreparedStatement ps=con.prepareStatement("update student set save=save-? where id=?");
ps.setInt(1, sale);
ps.setInt(2, id);
int f=ps.executeUpdate();
System.out.println(f);
if(f>0)
{
JOptionPane.showMessageDialog(null, "成功更新数据");
}
else
{
JOptionPane.showMessageDialog(null, "没有完美的更新数据");
}
ps.close();
con.close();
} catch (Exception e) {
// TODO: handle exception
JOptionPane.showMessageDialog(null, "没有成功更新数据");
}
}
public static void delete(int id)
{
try {
Connection conn=StudentDAO.getConn();
PreparedStatement ps=conn.prepareStatement("delete from student where id=?");
ps.setInt(1,id);
int f=ps.executeUpdate();
if(f>0)
{
JOptionPane.showMessageDialog(null, "成功删除数据");
}
else
{
JOptionPane.showMessageDialog(null, "没有删除数据");
}
ps.close();
conn.close();
} catch (Exception e) {
// TODO: handle exception
JOptionPane.showMessageDialog(null, "连接失败");
}
}
public static Vector query()
{
try {
Vector vector=new Vector();
Connection conn=StudentDAO.getConn();
PreparedStatement ps=conn.prepareStatement("select * from student ");
ResultSet rs=ps.executeQuery();
while(rs.next()&&rs.getRow()>0)
{
Vector row=new Vector();
for(int col=1;col<=rs.getMetaData().getColumnCount();col++)
{
if(col==2)
{
row.add(String.valueOf(rs.getString(col)));
}
else if(col==5||col==1||col==3||col==4)
{
row.add(String.valueOf(rs.getInt(col)));
}
}
vector.add(row);
}
return vector;
} catch (Exception e) {
// TODO: handle exception
JOptionPane.showMessageDialog(null, "查询失败");
e.printStackTrace();
return null;
}
}
}
学生信息类界面代码:
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Vector;
public class view extends JPanel {
JLabel j11=new JLabel(" 学号 ");
JLabel j12=new JLabel(" 姓名 ");
JLabel j13=new JLabel(" 语文 ");
JLabel j14=new JLabel("数学 ");
JLabel j15=new JLabel("英语 ");
JPanel jp2=new JPanel();
JLabel j1=new JLabel("学号");
JLabel j2=new JLabel("姓名");
JLabel j3=new JLabel("语文");
JLabel j4=new JLabel("数学");
JLabel j5=new JLabel("英语");
JTextField f1=new JTextField(10);
JTextField f2=new JTextField(13);
JTextField f3=new JTextField(13);
JTextField f4=new JTextField(13);
JTextField f5=new JTextField(13);
JButton b1=new JButton("查询");
JButton b2=new JButton("修改");
JButton b3=new JButton("删除");
JButton b4=new JButton("清空");
JButton b5=new JButton("添加");
final JTable t1=new JTable();
public view() {
this.setName("学生管理模块");
this.setLayout(null);
this.setLocation(300,100 );
this.setSize(850,600 );
this.setLayout(null);
JPanel panel=new JPanel();
JPanel panel2=new JPanel();
panel.add(t1);
panel.setBounds(10, 130,800, 1000);
jp2.setBounds(0, 100, 800, 100); //表头
this.add(panel);
final Vector<String> title=new Vector<String>();
title.add("学号");
title.add("姓名");
title.add("语文");
title.add("数学");
title.add("英语");
Vector value=StudentManage.query();
final DefaultTableModel model=new DefaultTableModel(value,title);
t1.setModel(model);
if(t1.getRowCount()>0)
{
t1.setRowSelectionInterval(0, 0);
}
t1.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
// TODO 自动生成的方法存根
}
@Override
public void mouseExited(MouseEvent e) {
// TODO 自动生成的方法存根
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO 自动生成的方法存根
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO 自动生成的方法存根
int row=t1.getSelectedRow();
String id=t1.getValueAt(row, 0).toString();
String name=t1.getValueAt(row, 1).toString();
String china=t1.getValueAt(row, 2).toString();
String math=t1.getValueAt(row, 3).toString();
String english=t1.getValueAt(row, 4).toString();
f1.setText(id);
f2.setText(name);
f3.setText(china);
f4.setText(math);
f5.setText(english);
}
});
b2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
int id=Integer.valueOf(f1.getText().trim());
String name=f2.getText().trim();
int china=Integer.valueOf(f1.getText().trim());
int math=Integer.valueOf(f1.getText().trim());
int english=Integer.valueOf(f1.getText().trim());
Student student=new Student();
student.setId(id);
student.setName(name);
student.setChina(china);
student.setMath(math);
student.setEnglish(english);
StudentManage.update(student);
Vector value=StudentManage.query();
final DefaultTableModel model=new DefaultTableModel(value,title);
t1.setModel(model);
}
});
b3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
int id=Integer.valueOf(f1.getText().trim());
Student student=new Student();
StudentManage.delete(id);
Vector value=StudentManage.query();
final DefaultTableModel model=new DefaultTableModel(value,title);
t1.setModel(model);
}
});
b4.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
f1.setText("");
f2.setText("");
f3.setText("");
f4.setText("");
f5.setText("");
}
});
b5.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
int id=Integer.valueOf(f1.getText().trim());
String name=f2.getText().trim();
int china=Integer.valueOf(f3.getText().trim());
int math=Integer.valueOf(f4.getText().trim());
int english=Integer.valueOf(f5.getText().trim());
Student student=new Student();
student.setId(id);
student.setName(name);
student.setChina(china);
student.setMath(math);
student.setEnglish(english);
StudentManage.insert(student);
Vector value=StudentManage.query();
final DefaultTableModel model=new DefaultTableModel(value,title);
t1.setModel(model);
}
});
jp2.add(j11); //第一个表头
jp2.add(j12);
jp2.add(j13);
jp2.add(j14);
jp2.add(j15);
this.add(jp2);
panel2.setBounds(0,20,840,100);
panel2.add(j1);
panel2.add(f1);
panel2.add(j2);
panel2.add(f2);
panel2.add(j3);
panel2.add(f3);
panel2.add(j4);
panel2.add(f4);
panel2.add(j5);
panel2.add(f5);
panel2.add(b1);
panel2.add(b2);
panel2.add(b3);
panel2.add(b4);
panel2.add(b5);
this.add(panel2);
this.setVisible(true);
}
}
效果截图:
8.代码总体结构
![]()