看本章内容前先看上一章内容
上一章内容:
学习做学生管理系统——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();
}
}
下一章正在制作了,这一章如有错误可以评论说一下,当然如果有更好的方法也可以在下方评论告诉我,非常感谢。