目录
功能:登录页面
功能:管理页面
增加功能展示:
删除功能展示
修改功能演示
查找功能演示
增删改查页面整体 代码如下:
连接数据库
前期准备:电脑已安装mysql 拥有navicat 且java已经完成jdbc导入驱动jar包工作(想要整个项目包的可以私信我)
展示:
登录页面代码如下:
package com.tjl.jdbc;
import java.sql.Connection;
import java.sql.*;
import javax.swing.*;
import javax.swing.text.DefaultEditorKit.InsertBreakAction;
import javax.swing.text.StyledEditorKit.BoldAction;
import com.tjl.jdbc.JDBC;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Login extends JFrame implements ActionListener {
Statement sql; //用来执行命令
ResultSet rs; // 结果集
JButton jb1,jb2; // 两个按钮
JTextField jt1; // 文本框
JPasswordField jp; // 密码框
//一个登录的静态页面
Login(){
setTitle("用户登录界面"); // 设置标题 (用户登录界面)
setSize(400,150); // 设施窗体长400像素 宽150像素
setLayout(new GridLayout(3,1)); // 三行一列的布局
JPanel jp1 = new JPanel(); // 定义容器
JPanel jp2 = new JPanel();
JPanel jp3 = new JPanel();
JLabel jl1 = new JLabel("用户名"); // 用户名标签
JLabel jl2 = new JLabel("密码");
jt1 = new JTextField(22); // 账号文本框
jp = new JPasswordField(22); // 密码文本框
jb1 =new JButton("登录"); // 登录按钮
jb2= new JButton("退出");
jp1.add(jl1);jp1.add(jt1); // 将标签添加到容器中
jp2.add(jl2);jp2.add(jp);
jp3.add(jb1);jp3.add(jb2);
add(jp1);add(jp2); add(jp3);
setVisible(true);
jb1.addActionListener(this); // 监听 jb1按钮
jb2.addActionListener(this);
jt1.addActionListener(this);
jp.addActionListener(this);
}
// main方法是程序 的入口 在入口我们可以看到 在为JDBC.java 中的JDBC这个方法传参 就是为了连接mysql
public static void main(String[] args) {
JDBC a=new JDBC("root","111111");
new Login();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//监听着按钮1 2 1 是登录 2是关闭
if(e.getSource()==jb1) {
denglu();
}
else if(e.getSource()==jb2) {
dispose();
}
}
void denglu() {
boolean account = jt1.getText().equals(""); // 获取账号文本框 并将他与空格比较
String password = new String(jp.getPassword()); // 获取密码框内容
boolean passwordT = password.equals("");
if(account==true) {
JOptionPane.showMessageDialog(null, "用户不能为空","登录消息",JOptionPane.WARNING_MESSAGE);
}
else if(passwordT==true) {
JOptionPane.showMessageDialog(null, "密码不能为空","登录消息",JOptionPane.WARNING_MESSAGE);
}
else {
String acco = jt1.getText();
String pw =password;
// acco 和pw 就是用户输入的账户和密码 要与我们数据库中有的账户和密码进行比对
if(JDBC.loginAccount(acco, pw)==true) {
new MSui();
}else {
JOptionPane.showMessageDialog(null, "登录失败","登录消息",JOptionPane.WARNING_MESSAGE);
}
}
}
}
局部代码
if(e.getSource()==jb1) {
// 获取各个输入框的内容
String xuehao = jt1.getText();
String xingming = jt2.getText();
String xingbie = jt3.getText();
String minzu = jt4.getText();
String chushengriqi = jt5.getText();
String ruxueshijian = jt6.getText();
String xueyuan = jt7.getText();
String zhuanye = jt8.getText();
Connection con = JDBC.con;
// 执行插入语句
String Uri = "insert into student values(?,?,?,?,?,?,?,?)";
PreparedStatement preSql; //PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement(sql)方法可以获得PreparedStatment对象
try {
preSql= con.prepareStatement(Uri);
preSql.setString(1, xuehao);//这里的setString 的用法就是给第一个?的值 赋予xuehao 文本框的内容
preSql.setString(2, xingming);//这里的setString 的用法就是给第二个?的值 赋予姓名 文本框的内容
preSql.setString(3, xingbie);
preSql.setString(4, minzu);
preSql.setString(5, chushengriqi);
preSql.setString(6, ruxueshijian);
preSql.setString(7, xueyuan);
preSql.setString(8, zhuanye);
int ok = preSql.executeUpdate();// 可执行增,删,改,返回执行受到影响的行数
JOptionPane.showMessageDialog(null, "添加成功","添加消息",JOptionPane.WARNING_MESSAGE);
}catch (Exception e1) {
// TODO: handle exception
JOptionPane.showMessageDialog(null, "当前学号已经存在","添加消息",JOptionPane.WARNING_MESSAGE);
}
}
if(e.getSource()==jb2) {
String xuehao = jt1.getText();
// 因为我设置的学号是主键 所以我这边要删除学生信息的话应该用学号信息来进行删除
if(xuehao.equals("")) {
JOptionPane.showMessageDialog(null, "文本框不能为空","删除消息",JOptionPane.WARNING_MESSAGE);
}else {
Connection con = JDBC.con;
// 删除语句
String del = "delete from student where sNum=?";
PreparedStatement preSql;
try {
preSql= con.prepareStatement(del);
preSql.setString(1, xuehao);
int ok = preSql.executeUpdate();
if(ok==0) {
JOptionPane.showMessageDialog(null, "未找到相关学号","删除消息",JOptionPane.WARNING_MESSAGE);
}else {
JOptionPane.showMessageDialog(null, "删除成功","删除消息",JOptionPane.WARNING_MESSAGE);
}
}catch(Exception e2) {
JOptionPane.showMessageDialog(null, "删除失败","删除消息",JOptionPane.WARNING_MESSAGE);
}
}
}
局部代码
// 修改功能的实现(修改的实质就是更新) 修改也是根据学号来修改
if(e.getSource()==jb3) {
String xuehao = jt1.getText();
String xingming = jt2.getText();
String xingbie = jt3.getText();
String minzu = jt4.getText();
String chushengriqi = jt5.getText();
String ruxueshijian = jt6.getText();
String xueyuan = jt7.getText();
String zhuanye = jt8.getText();
if(xuehao.equals("")) {
JOptionPane.showMessageDialog(null, "文本框不能为空","修改消息",JOptionPane.WARNING_MESSAGE);
}else {
Connection con = JDBC.con;
String change = "update student set sName=?,sSex=?,sEthnic=?,sBirth=?,sYear=?,sCollege=?,sMajor=? where sNum=?";
PreparedStatement preSql;
try {
preSql= con.prepareStatement(change);
preSql.setString(1, xingming);
preSql.setString(2, xingbie);
preSql.setString(3, minzu);
preSql.setString(4,chushengriqi);
preSql.setString(5,ruxueshijian);
preSql.setString(6, xueyuan);
preSql.setString(7, zhuanye);
preSql.setString(8, xuehao);
int ok = preSql.executeUpdate();
if(ok==0) {
JOptionPane.showMessageDialog(null, "请输入正确的学号","修改消息",JOptionPane.WARNING_MESSAGE);
}else {
JOptionPane.showMessageDialog(null, "修改成功","修改消息",JOptionPane.WARNING_MESSAGE);
}
}catch(Exception e3) {
JOptionPane.showMessageDialog(null, "修改失败","修改消息",JOptionPane.WARNING_MESSAGE);
System.out.println(e3);
}
}
}
局部代码:
if(e.getSource()==jb4) {
String xuehao = jt1.getText();
String xingming = jt2.getText();
String xingbie = jt3.getText();
String minzu = jt4.getText();
String chushengriqi = jt5.getText();
String ruxueshijian = jt6.getText();
String xueyuan = jt7.getText();
String zhuanye = jt8.getText();
PreparedStatement preSql;
ResultSet rs = null;
String search = "select * from student where sNum=?" ;//查找所有的信息 根据学号为条件
Connection con = JDBC.con;
try {
preSql= con.prepareStatement(search);
preSql.setString(1, xuehao);
rs = preSql.executeQuery(); //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供我们使用。
String data[] = new String[8]; // 定义一个数组
rs.next();//将指针从当前位置下移一行。ResultSet 指针最初位于第一行之前;第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行
data[0]= rs.getString(1); //将学号 姓名 等等信息放进数据内
data[1] = rs.getString(2);
data[2]= rs.getString(3);
data[3] = rs.getString(4);
data[4]= rs.getString(5);
data[5] = rs.getString(6);
data[6]= rs.getString(7);
data[7] = rs.getString(8);
jt1.setText(data[0]); // 将数组中的信息依次赋值到我们的显示文本框中
jt2.setText(data[1]);
jt3.setText(data[2]);
jt4.setText(data[3]);
jt5.setText(data[4]);
jt6.setText(data[5]);
jt7.setText(data[6]);
jt8.setText(data[7]);
}catch(Exception e4) {
System.out.println(e4);
}
}
// 退出
if(e.getSource()==jb5) {
dispose();
}
}
}
package com.tjl.jdbc;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class MSui extends JFrame implements ActionListener{
JButton jb1,jb2,jb3,jb4,jb5;
JTextField jt1,jt2,jt3,jt4,jt5,jt6,jt7,jt8,jt9;
// 增删改查静态页面的制作
MSui(){
setTitle("学生信息管理系统");
setSize(700,600);
setLayout(new GridLayout(6,1));
JPanel jp1 = new JPanel(); JPanel jp2 = new JPanel();
JPanel jp3 = new JPanel(); JPanel jp4 = new JPanel();
JPanel jp5 = new JPanel(); JPanel jp6 = new JPanel();
JLabel jl1 = new JLabel("学号");
JLabel jl2 = new JLabel("姓名");
JLabel jl3 = new JLabel("性别");
JLabel jl4 = new JLabel("民族");
JLabel jl5 = new JLabel("出生日期");
JLabel jl6 = new JLabel("入学时间");
JLabel jl7 = new JLabel("学院");
JLabel jl8 = new JLabel("专业");
jt1= new JTextField(15); jt2 = new JTextField(15);
jt3= new JTextField(15); jt4 = new JTextField(15);
jt5= new JTextField(15); jt6 = new JTextField(15);
jt7= new JTextField(15); jt8 = new JTextField(15);
jb1 = new JButton("增加"); jb2 = new JButton("删除");jb3 = new JButton("修改");jb4 = new JButton("查找");jb5= new JButton("退出");
jp1.add(jl1);jp1.add(jt1);jp1.add(jl2);jp1.add(jt2);
jp2.add(jl3);jp2.add(jt3);jp2.add(jl4);jp2.add(jt4);
jp3.add(jl5); jp3.add(jt5); jp3.add(jl6);jp3.add(jt6);
jp4.add(jl7);jp4.add(jt7); jp4.add(jl8); jp4.add(jt8);
jp6.add(jb1);jp6.add(jb2);jp6.add(jb3);jp6.add(jb4); jp6.add(jb5);
add(jp1);add(jp2); add(jp3); add(jp4); add(jp5); add(jp6);
setVisible(true);
jb1.addActionListener(this);
jb2.addActionListener(this );
jb3.addActionListener(this);
jb4.addActionListener(this);
jb5.addActionListener(this);
}
public static void main(String[] args) {
new MSui();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
// 添加功能的实现
if(e.getSource()==jb1) {
// 获取各个输入框的内容
String xuehao = jt1.getText();
String xingming = jt2.getText();
String xingbie = jt3.getText();
String minzu = jt4.getText();
String chushengriqi = jt5.getText();
String ruxueshijian = jt6.getText();
String xueyuan = jt7.getText();
String zhuanye = jt8.getText();
Connection con = JDBC.con;
// 执行插入语句
String Uri = "insert into student values(?,?,?,?,?,?,?,?)";
PreparedStatement preSql; //PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement(sql)方法可以获得PreparedStatment对象
try {
preSql= con.prepareStatement(Uri);
preSql.setString(1, xuehao);//这里的setString 的用法就是给第一个?的值 赋予xuehao 文本框的内容
preSql.setString(2, xingming);//这里的setString 的用法就是给第二个?的值 赋予姓名 文本框的内容
preSql.setString(3, xingbie);
preSql.setString(4, minzu);
preSql.setString(5, chushengriqi);
preSql.setString(6, ruxueshijian);
preSql.setString(7, xueyuan);
preSql.setString(8, zhuanye);
int ok = preSql.executeUpdate();// 可执行增,删,改,返回执行受到影响的行数
JOptionPane.showMessageDialog(null, "添加成功","添加消息",JOptionPane.WARNING_MESSAGE);
}catch (Exception e1) {
// TODO: handle exception
JOptionPane.showMessageDialog(null, "当前学号已经存在","添加消息",JOptionPane.WARNING_MESSAGE);
}
}
//删除功能的实现
if(e.getSource()==jb2) {
String xuehao = jt1.getText();
// 因为我设置的学号是主键 所以我这边要删除学生信息的话应该用学号信息来进行删除
if(xuehao.equals("")) {
JOptionPane.showMessageDialog(null, "文本框不能为空","删除消息",JOptionPane.WARNING_MESSAGE);
}else {
Connection con = JDBC.con;
// 删除语句
String del = "delete from student where sNum=?";
PreparedStatement preSql;
try {
preSql= con.prepareStatement(del);
preSql.setString(1, xuehao);
int ok = preSql.executeUpdate();
if(ok==0) {
JOptionPane.showMessageDialog(null, "未找到相关学号","删除消息",JOptionPane.WARNING_MESSAGE);
}else {
JOptionPane.showMessageDialog(null, "删除成功","删除消息",JOptionPane.WARNING_MESSAGE);
}
}catch(Exception e2) {
JOptionPane.showMessageDialog(null, "删除失败","删除消息",JOptionPane.WARNING_MESSAGE);
}
}
}
// 修改功能的实现(修改的实质就是更新) 修改也是根据学号来修改
if(e.getSource()==jb3) {
String xuehao = jt1.getText();
String xingming = jt2.getText();
String xingbie = jt3.getText();
String minzu = jt4.getText();
String chushengriqi = jt5.getText();
String ruxueshijian = jt6.getText();
String xueyuan = jt7.getText();
String zhuanye = jt8.getText();
if(xuehao.equals("")) {
JOptionPane.showMessageDialog(null, "文本框不能为空","修改消息",JOptionPane.WARNING_MESSAGE);
}else {
Connection con = JDBC.con;
String change = "update student set sName=?,sSex=?,sEthnic=?,sBirth=?,sYear=?,sCollege=?,sMajor=? where sNum=?";
PreparedStatement preSql;
try {
preSql= con.prepareStatement(change);
preSql.setString(1, xingming);
preSql.setString(2, xingbie);
preSql.setString(3, minzu);
preSql.setString(4,chushengriqi);
preSql.setString(5,ruxueshijian);
preSql.setString(6, xueyuan);
preSql.setString(7, zhuanye);
preSql.setString(8, xuehao);
int ok = preSql.executeUpdate();
if(ok==0) {
JOptionPane.showMessageDialog(null, "请输入正确的学号","修改消息",JOptionPane.WARNING_MESSAGE);
}else {
JOptionPane.showMessageDialog(null, "修改成功","修改消息",JOptionPane.WARNING_MESSAGE);
}
}catch(Exception e3) {
JOptionPane.showMessageDialog(null, "修改失败","修改消息",JOptionPane.WARNING_MESSAGE);
System.out.println(e3);
}
}
}
// 查找功能的实现
if(e.getSource()==jb4) {
String xuehao = jt1.getText();
String xingming = jt2.getText();
String xingbie = jt3.getText();
String minzu = jt4.getText();
String chushengriqi = jt5.getText();
String ruxueshijian = jt6.getText();
String xueyuan = jt7.getText();
String zhuanye = jt8.getText();
PreparedStatement preSql;
ResultSet rs = null;
String search = "select * from student where sNum=?" ;//查找所有的信息 根据学号为条件
Connection con = JDBC.con;
try {
preSql= con.prepareStatement(search);
preSql.setString(1, xuehao);
rs = preSql.executeQuery(); //executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供我们使用。
String data[] = new String[8]; // 定义一个数组
rs.next();//将指针从当前位置下移一行。ResultSet 指针最初位于第一行之前;第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行
data[0]= rs.getString(1); //将学号 姓名 等等信息放进数据内
data[1] = rs.getString(2);
data[2]= rs.getString(3);
data[3] = rs.getString(4);
data[4]= rs.getString(5);
data[5] = rs.getString(6);
data[6]= rs.getString(7);
data[7] = rs.getString(8);
jt1.setText(data[0]); // 将数组中的信息依次赋值到我们的显示文本框中
jt2.setText(data[1]);
jt3.setText(data[2]);
jt4.setText(data[3]);
jt5.setText(data[4]);
jt6.setText(data[5]);
jt7.setText(data[6]);
jt8.setText(data[7]);
}catch(Exception e4) {
System.out.println(e4);
}
}
// 退出
if(e.getSource()==jb5) {
dispose();
}
}
}
代码如下:
package com.tjl.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
//JDBC的连接
public class JDBC {
public static Connection con = null;
public JDBC(String account ,String password){
//第一步 加载驱动
// 尝试加载驱动 若成功 输出驱动加载成功 若失败(我这里是catch了一下 输出驱动加载失败 但是 并没有输出具体的失败细节)
// 想知道失败细节的,可以输出一下e
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.print("驱动加载成功");
}catch (Exception e) {
// TODO: handle exception
System.out.println("驱动加载失败");
}
// 连接数据库
String uri ="jdbc:mysql://localhost:3306/student?characterEncoding=utf-8&useSSL=false";
// 尝试连接 若成功 则输出连接数据库成功 (同驱动的加载)
// try里面的两个参数 account password 是在login.java 中写死了的 root 111111 就是我自己连接mysql用的账号密码 并不是study库中的账号密码
try {
con = DriverManager.getConnection(uri,account,password);
System.out.println("连接数据库成功");
}catch(SQLException e) {
System.out.println("连接数据库失败");
}
}
public static boolean loginAccount(String account ,String password) {
//登录账号
//对数据库的信息进行读取
String uri="select account ,password from user";
Statement sql; //用来执行命令
ResultSet rs; // 制定了一个结果集 用来接收返回的结果
try {
sql=con.createStatement(); //利用现有连接创建一个statement对象
//statement对象是数据库sql语句的载体,通过statement对象可以执行数据库访问的sql语句;使用statement对象执行insert、update、delete语句是调用executeUpdate()方法。
rs=sql.executeQuery(uri);//查询语句 并且结果返回到了结果集上
while(rs.next()) {
// rs.next() 如果集合中有数据 就返回的是真 没有数据返回的就是假
String acc = rs.getString(1);//返回的第一个值就是账号
String pass= rs.getString(2);//返回的第二个值就是密码
// 如果我从数据库中查到的 acc 和 pass 和我在登录界面输入的账号 密码一致的时候 就返回真
if(acc.equals(account)&&pass.equals(password)) {
return true;
}
}
}catch(SQLException e) {
return false;
}
return false;
}
}
数据库中与项目相关的两个表表名和字段设置如下(建议大家和我设置成一样的)
创建了一个名为mysql 的连接 并且建了一个名为student的数据库
在student库中建立了两个表
user表的两个字段
student表的字段
这是一个连接数据库的具有增删改查功能的学生管理系统,希望对大家的学习有所帮助!!!