学习做学生管理系统——java swing+Mysql 第二章(登录功能)

看本章内容前先看上一章内容
上一章内容:
学习做学生管理系统——java swing+Mysql 第一章

这一次是在上一章的基础上,编写登录按钮功能
主要进行两种功能:一.判断帐号密码是否正确
         A.帐号密码错误时,给错误提示框
         B.帐号密码正确时,给正确提示框(后续章节在补充新功能)
         二.帐号密码为空时,给错误提示框

在编写代码时,先确保自己引入了mysql,如果没有引入
看这篇文章引入Mysql

当引入了相应的JDBC,这时候就需要了解一下怎么连接Mysql,这里我就引入菜鸟教程的链接
菜鸟教程链接
主要了解一下怎么连接数据库(可以根据自己的需求,继续深入研究)

如果想快速了解连接数据库,可以看这里的简短代码

建立连接所必须的介质

static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";  //这里可以不用改动
static final String DB_URL = "jdbc:mysql://localhost:3306/StudentManage?useSSL=false&serverTimezone=UTC";
//StudentManage是库的名字	
static final String USER = "root";//连接用的账户名
static final String PASS = "123";//密码

剩下的功能则放在按钮触发来实现

一、判断是否正确
当你连接了数据库,就有了可以实现查询的功能,只需要把帐号和密码的信息放进数据库里面的表,然后在代码中实现一个在表中查询的功能,即可实现判断正确
在这里插入图片描述
接下来说说实现过程
要查询表,就需要信息,这时候就要从第一章创建的帐号框和密码框读取输入的信息

程序当然不会在你输入信息的时候就懂得要查询,就要给第一章原先添加的登录按钮添加一个

触发(我的触发是按照第一章的内容来设置的,所以我就将触发的函数直接写在login()的函数中)

loginButton.addActionListener(new ActionListener() {
});//loginButton是设置的登录按钮的名字

登录所要完成的功能就会写在这个函数里面

写完触发框架,就要在里面添加触发后所需要的功能函数框架

loginButton.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent e) {
	}
});

写完框架后,就把功能放进框架中,从读取信息开始

下面这段代码实现的就是读取帐号框和密码框的内容

String s1=text1.getText().toString();
String s2=new String(text2.getPassword());

接下来就是数据库的连接,刚刚我们已经完成了连接介质的准备,这时候就是让他进行连接了。

Connection c=null;
PreparedStatement stmt=null;

定义完,这时候就用try-catch组合来写连接

try {
	Class.forName(JDBC_DRIVER);
	c = DriverManager.getConnection(DB_URL,USER,PASS);//连接数据库
} catch ( Exception e1 ) {
	System.err.println( e1.getClass().getName() + ": " + e1.getMessage() );
	System.exit(0);
}

搜索帐号密码的功能就写在try里面

try {
	Class.forName(JDBC_DRIVER);
	c = DriverManager.getConnection(DB_URL,USER,PASS);//连接数据库
	String sql1="SELECT * FROM account where user=? and password=?";//数据库的查询
    stmt=c.prepareStatement(sql1);//prepareStatement方法可以自行百度,这里就不详细解答了
	stmt.setString(1, s1);//1,s1,第一个为第一个问号的位置,第二个为第二个问号的位置
	stmt.setString(2, s2);//跟上面同理
	//setString的主要目的是把帐号密码的信息放进sql1里面进行指定内容的查询
	ResultSet rs = stmt.executeQuery();//将结果放进rs中
} catch ( Exception e1 ) {
	System.err.println( e1.getClass().getName() + ": " + e1.getMessage() );
	System.exit(0);
}

写完查询的功能,就要给他上色,当帐号密码正确的时候有提示框告诉你正确了,错误的时候也有提示框告诉你错误,提示框的相关内容就要有关JOptionPane类了

if这段代码跟在ResultSet rs = stmt.executeQuery();后面

if(s1.length()!=0&&s2.length()!=0) {
				    	  if(rs.next()) {
				    	  	JOptionPane.showMessageDialog(null, "登陆成功");
				      	  }
				      	  else{
				    	  	JOptionPane.showMessageDialog(null, "帐号或密码有误", "错误", ERROR_MESSAGE);
				      	  }
				      }

写完判断,就是执行完功能了,这时候就要进行连接的关闭
这些都是写在try函数的最后的。用于关闭数据库的连接

rs.close();
stmt.close();
c.close();

判断是否输入帐号密码
当帐号密码,有一个没有输入或者都没有输入的情况下,要提示使用者输入完全,这时候回到前面的if的那段代码

if(s1.length()!=0&&s2.length()!=0) {
				    	  if(rs.next()) {
				    	  	JOptionPane.showMessageDialog(null, "登陆成功");
				      	  }
				      	  else{
				    	  	JOptionPane.showMessageDialog(null, "帐号或密码有误", "错误", ERROR_MESSAGE);
				      	  }
				      }

我们只需要在这里面改变成if-else嵌套就可以完成这个判断的功能

代码如下

if(s1.length()!=0&&s2.length()!=0) {
				    	  if(rs.next()) {
				    	  	JOptionPane.showMessageDialog(null, "登陆成功");
				      	  }
				      	  else{
				    	  	JOptionPane.showMessageDialog(null, "帐号或密码有误", "错误", ERROR_MESSAGE);
				      	  }
				      }else if(s1.length()==0||s2.length()==0) {
							JOptionPane.showMessageDialog(null, "请输入帐号或密码", "错误", ERROR_MESSAGE);
					  }

效果图
在这里插入图片描述
在这里插入图片描述

最后整合第一章的代码

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.sql.*;
public class main {
	static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";  
    static final String DB_URL = "jdbc:mysql://localhost:3306/StudentManage?useSSL=false&serverTimezone=UTC";
	
    static final String USER = "root";
    static final String PASS = "123";
    private static void login(){
		JFrame jf=new JFrame("学生管理系统登录界面");//登录主界面
		jf.setSize(350, 200);
		JPanel jp=new JPanel();//制作界面
		jf.add(jp);
		jp.setLayout(null);
		JLabel acc=new JLabel("帐号");//帐号
		JLabel pass=new JLabel("密码");//密码
		jp.add(pass);
		jp.add(acc);
		acc.setBounds(50,20,80,25);
		pass.setBounds(50,50,80,25);
		JTextField text1=new JTextField();//帐号输入
		text1.setBounds(110, 20, 165, 25);
		jp.add(text1);
		JPasswordField text2=new JPasswordField();//密码输入
		text2.setBounds(110, 50, 165, 25);
		jp.add(text2);
		JButton loginButton=new JButton("登录");//登录按钮
		loginButton.setBounds(120, 100, 80, 25);
		jp.add(loginButton);
		JButton regButton=new JButton("注册");//注册按钮
		regButton.setBounds(220, 100, 80, 25);
		jp.add(regButton);
		jf.setVisible(true);
		loginButton.addActionListener(new ActionListener() {
			private int ERROR_MESSAGE;

			public void actionPerformed(ActionEvent e) {
				String s1=text1.getText().toString();
				String s2=new String(text2.getPassword());
				Connection c=null;
				PreparedStatement stmt=null;
				try {				
				      Class.forName(JDBC_DRIVER);
				      c = DriverManager.getConnection(DB_URL,USER,PASS);
				      String sql1="SELECT * FROM account where user=? and password=?";
				      stmt=c.prepareStatement(sql1);
				      stmt.setString(1, s1);
				      stmt.setString(2, s2);
				      ResultSet rs = stmt.executeQuery();
				      if(s1.length()!=0&&s2.length()!=0) {
				    	  if(rs.next()) {
				    	  	JOptionPane.showMessageDialog(null, "登陆成功");
				      	  }
				      	  else{
				    	  	JOptionPane.showMessageDialog(null, "帐号或密码有误", "错误", ERROR_MESSAGE);
				      	  }
				      }else if(s1.length()==0||s2.length()==0) {
							JOptionPane.showMessageDialog(null, "请输入帐号或密码", "错误", ERROR_MESSAGE);
					  }
				      rs.close();
				      stmt.close();
				      c.close();
				    } catch ( Exception e1 ) {
				    	System.err.println( e1.getClass().getName() + ": " + e1.getMessage() );
				        System.exit(0);
				    }
			}
		});
	}
	
	public static void main(String[] args) {
		
		login();
	}
}

下一章正在制作了,这一章如有错误可以评论说一下,当然如果有更好的方法也可以在下方评论告诉我,非常感谢。

评论 10 您还未登录,请先 登录 后发表或查看评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:黑客帝国 设计师:我叫白小胖 返回首页

打赏作者

MarcusRossi

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值