用Java语言和Mysql数据库编写一个账户登录系统

您所在的位置:网站首页 用python做一个数据库系统 用Java语言和Mysql数据库编写一个账户登录系统

用Java语言和Mysql数据库编写一个账户登录系统

2023-03-28 14:21| 来源: 网络整理| 查看: 265

账户登录系统是我们常用的程序,无论是你正在访问的知乎,还是平时使用的社交软件,都离不开账户登录系统,今天我就来教大家如何使用Java语言和Mysql数据库来制作一个账户登录系统。

首先我们先创建数据库和表,我在此用的是Mysql和Navicat,表中要有三个列,列名分别是user、password、email,如下图

接下来,我们进入编写Java代码环节,我的编程环境是Java11和idea,在连接数据库之前需要在编程软件中安装连接数据库的插件:jdbc,每种Java版本对应的jdbc版本都不同,每款编程软件安装jdbc的方式也不同,如果不会的自行百度,我在此不做过多赘述。

我们平时编程时经常要用到数据库的连接程序,考虑到要多次使用,我把数据库的连接程序封装在了一个包当中,这样我们平时编程要用到数据库连接程序时,就只需要将这个包导入进去即可,不需要编写。因为我平时最常用的是Mysql和Sqlserver,所以这个包当中有这两种数据库的连接方式。代码如下:

package databaselink; import java.sql.*; public class DatabaseLink { private static Connection con = null; private static String uri; public static Connection MysqlLink(String ip, String dbname, String user, String password) { uri = "jdbc:mysql://" + ip + ":3306/" + dbname + "?useSSL=false&serverTimezone=GMT"; try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (Exception e) { System.out.print("jdbc加载失败;"+e); } try { con = DriverManager.getConnection(uri, user, password); } catch (SQLException e) { System.out.print("连接失败;"+e); } return con; } public static Connection SqlserverLink(String ip, String dbname, String user, String password) { uri = "jdbc:sqlserver://" + ip + ":1433;DatabaseName=" + dbname + ";trustServerCertificate=true"; try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); } catch (Exception e) { System.out.print("jdbc加载失败;"+e); } try { con = DriverManager.getConnection(uri, user, password); } catch (SQLException e) { System.out.print("连接失败;"+e); } return con; } }

接下来,我们进入主程序当中,我们要把我们所用需要导入的包统统导入进去,代码如下:

import databaselink.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*;

接下来我们创建主类,这个程序我是用一个类包含若干方法的方式写的,代码如下:

public class Main{}

在类中创建三个成员变量,用于后续保存登录账户的账号、密码、邮箱

static String user,password,email;

在类中我们写主函数,主函数中只有一条语句,即调用Loginwindow方法

public static void main(String args[]){ Loginwindow(); }

随后我们在Main类里面编写Loginwindow方法,这个方法主要负责构件第一个窗口,以及窗口里面的两个用于输入账户和密码的文本框,和注册按钮,代码如下:

static void Loginwindow(){}

在Loginwindow方法当中用Frame类创建一个对象,我将这个对象在此命名为frame,该对象的主要功能是构件窗口,并可以将文本框以及按钮包含在它创建的窗口当中,代码的括弧内可以放一个字符串,该字符串会成为该窗口的标题,代码如下:

Frame frame = new Frame("登录系统");

让我们来设置该窗口的尺寸,代码的括弧内第一个数为窗口的横向尺寸,第二个数为窗口的纵向尺寸

frame.setSize(350, 200);

建立两个容器,用于容纳那两个文本框,这两个容器其实是两个用Panel类创建的对象,我将它们分别命名为panel1和panel2

Panel panel1=new Panel(); Panel panel2=new Panel();

建立两个文本框,这两个文本框是由TextField类创建的对象,对象名我就不说了,自己看,代码的括弧内应该写个数,这个数决定文本框的长度。

TextField uinputTextField=new TextField(20); TextField pinputTextField=new TextField(20);

将两个文本框添加进容器当中,由之前那两个容器对象调用add方法,代码的括弧内写要添加进去的文本框对象名

panel1.add(uinputTextField); panel2.add(pinputTextField);

禁止用户调整窗口的大小,由窗口对象调用setResizable方法,这条代码可有可无

frame.setResizable(false);

将窗口调至屏幕的最中心,由窗口对象调用setLocationRelativeTo方法,这条代码可有可无

frame.setLocationRelativeTo(null);

窗口布局管理,这个比较重要,如果没有的话,窗口中的东西会连七八糟的

frame.setLayout(new FlowLayout());

创建显示文字的对象,并调用setText方法,用于提示用户文本框中要输入的内容

JLabel label1 = new JLabel(); label1.setText("登录账号:"); JLabel label2 = new JLabel(); label2.setText("登录密码:");

用JButton类创建按钮对象,代码括弧内写标题

JButton jb1=new JButton("确定"); JButton jb2=new JButton("注册");

对确定按钮添加监听事件

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

在监听事件中添加语句,如果确定按钮被点击的话就会执行监听事件里的语句,将用户输入在文本框中输入的数据放在成员变量中,判断用户输入的数据是否在数据库中存在,如果存在的话就提示用户登录成功,如果不存在的话就提示用户数据错误,link方法和tlitelwindow方法、flitelwindow方法由我们之后编写

user=uinputTextField.getText(); password=pinputTextField.getText(); if(link(user,password)) tlitelwindow(); else flitelwindow();

对注册按钮添加监听事件,关闭这个窗口,打开新的注册窗口,注册窗口我封装在了enroll方法中,随后我会介绍enroll方法

jb2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { frame.dispose(); enroll(); } });

将按钮、文本框、文字添加入窗口中

frame.add(label1); frame.add(panel1); frame.add(label2); frame.add(panel2); frame.add(jb1); frame.add(jb2);

将窗口显示出来

frame.setVisible(true);

为窗口添加监听事件,并添加退出程序的方法

frame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } });

在此,Loginwindow方法就全部编写完成了,接下来我们来编写link方法,它的主要功能是连接数据库,判断用户输入的数据是否和数据库中保存的数据是否相同,并将判断结果返回到Loginwindow方法中

static boolean link(String user,String password){}

连接数据库的语句,我们调用DatabaseLink包当中的MysqlLink方法来实现与数据库的连接,代码中括弧内第一个数据应该写Mysql数据库的IP地址,第二个数据写Mysql数据库的名字,第三个数据写数据库的登录账户名,第四个数据写数据库的登录密码

Connection con=DatabaseLink.MysqlLink("localhost","database1","root","123456");

连接数据库中的表,并判断表中的数据是否和用户输入的数据相同,最后返回判断结果

try { Statement sql = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs=sql.executeQuery("select * from up"); while(rs.next()) { if(user.equals(rs.getString(1))&&password.equals(rs.getString(2))) return true; } } catch(SQLException e) { System.out.println(e); } return false;

至此link方法就编写完了,接下来我们来构件提示错误信息的窗口,flitelwindow,由于许多内容与上面的大致一致,我在此就不再做过多赘述了

static void flitelwindow(){ Frame frame = new Frame(); frame.setSize(170,90); frame.setResizable(false);//禁止窗口缩放 frame.setLocationRelativeTo(null); //将窗口放在屏幕最中心 frame.setLayout(new FlowLayout()); //布局管理 JLabel label = new JLabel(); label.setText("登录账号错误或登录密码错误");//设置显示文字 frame.add(label); frame.setVisible(true); frame.addWindowListener(new WindowAdapter(){ //添加窗口事件监听 public void windowClosing(WindowEvent e){ //窗口关闭方法 frame.dispose(); } }); }

构件登陆成功的提示信息窗口

static void tlitelwindow(){ Frame frame = new Frame(); frame.setSize(170,90); frame.setResizable(false);//禁止窗口缩放 frame.setLocationRelativeTo(null); //将窗口放在屏幕最中心 frame.setLayout(new FlowLayout()); //布局管理 JLabel label = new JLabel(); label.setText("登录成功");//设置显示文字 frame.add(label); frame.setVisible(true); frame.addWindowListener(new WindowAdapter(){ //添加窗口事件监听 public void windowClosing(WindowEvent e){ //窗口关闭方法 frame.dispose(); } }); }

接下来构件注册界面的方法enroll方法

static void enroll(){ Frame frame=new Frame("注册系统"); frame.setSize(350,250); frame.setResizable(false);//禁止窗口缩放 frame.setLocationRelativeTo(null); //将窗口放在屏幕最中心 frame.setLayout(new FlowLayout()); //布局管理 JButton jb=new JButton("确定");//设置确定按钮 Panel panel1=new Panel(); Panel panel2=new Panel(); Panel panel3=new Panel(); Panel panel4=new Panel(); TextField uinputTextField=new TextField(20); TextField einputTextField=new TextField(20); TextField pinputTextField=new TextField(20); TextField ptinputTextField=new TextField(20); panel1.add(uinputTextField); panel2.add(einputTextField); panel3.add(pinputTextField); panel4.add(ptinputTextField); JLabel label1 = new JLabel(); label1.setText("登录账号:");// 设置显示文字 JLabel label2 = new JLabel(); label2.setText("电子邮箱:");// 设置显示文字 JLabel label3 = new JLabel(); label3.setText("登录密码:");// 设置显示文字 JLabel label4 = new JLabel(); label4.setText("确认密码:");// 设置显示文字 frame.add(label1); frame.add(panel1); frame.add(label2); frame.add(panel2); frame.add(label3); frame.add(panel3); frame.add(label4); frame.add(panel4); frame.add(jb); frame.setVisible(true); jb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(ptinputTextField.getText().equals(pinputTextField.getText())) { user=uinputTextField.getText(); password=pinputTextField.getText(); email=einputTextField.getText(); Connection con=DatabaseLink.MysqlLink("localhost","database1","root","123456"); Statement sql; try{ sql=con.createStatement(); PreparedStatement st=con.prepareStatement("insert into up values(?,?,?)"); st.setString(1,user); st.setString(2,password); st.setString(3,email); st.executeUpdate(); } catch(Exception e3){ System.out.print(e3); } Frame frame3 = new Frame(); frame3.setSize(170,90); frame3.setResizable(false);//禁止窗口缩放 frame3.setLocationRelativeTo(null); //将窗口放在屏幕最中心 frame3.setLayout(new FlowLayout()); //布局管理 JLabel label = new JLabel(); label.setText("注册成功");//设置显示文字 frame3.add(label); frame3.setVisible(true); frame3.addWindowListener(new WindowAdapter(){ //添加窗口事件监听 public void windowClosing(WindowEvent e){ //窗口关闭方法 frame3.dispose(); } }); } else { Frame frame2 = new Frame(); frame2.setSize(170,90); frame2.setResizable(false);//禁止窗口缩放 frame2.setLocationRelativeTo(null); //将窗口放在屏幕最中心 frame2.setLayout(new FlowLayout()); //布局管理 JLabel label = new JLabel(); label.setText("两次输入的密码不同");//设置显示文字 frame2.add(label); frame2.setVisible(true); frame2.addWindowListener(new WindowAdapter(){ //添加窗口事件监听 public void windowClosing(WindowEvent e){ //窗口关闭方法 frame2.dispose(); } }); } } }); frame.addWindowListener(new WindowAdapter(){ //添加窗口事件监听 public void windowClosing(WindowEvent e){ //窗口关闭方法 frame.dispose(); Loginwindow(); } }); }

该主程序完整代码如下

import databaselink.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class Main{ static String user,password,email; static void enroll(){ Frame frame=new Frame("注册系统"); frame.setSize(350,250); frame.setResizable(false);//禁止窗口缩放 frame.setLocationRelativeTo(null); //将窗口放在屏幕最中心 frame.setLayout(new FlowLayout()); //布局管理 JButton jb=new JButton("确定");//设置确定按钮 Panel panel1=new Panel(); Panel panel2=new Panel(); Panel panel3=new Panel(); Panel panel4=new Panel(); TextField uinputTextField=new TextField(20); TextField einputTextField=new TextField(20); TextField pinputTextField=new TextField(20); TextField ptinputTextField=new TextField(20); panel1.add(uinputTextField); panel2.add(einputTextField); panel3.add(pinputTextField); panel4.add(ptinputTextField); JLabel label1 = new JLabel(); label1.setText("登录账号:");// 设置显示文字 JLabel label2 = new JLabel(); label2.setText("电子邮箱:");// 设置显示文字 JLabel label3 = new JLabel(); label3.setText("登录密码:");// 设置显示文字 JLabel label4 = new JLabel(); label4.setText("确认密码:");// 设置显示文字 frame.add(label1); frame.add(panel1); frame.add(label2); frame.add(panel2); frame.add(label3); frame.add(panel3); frame.add(label4); frame.add(panel4); frame.add(jb); frame.setVisible(true); jb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(ptinputTextField.getText().equals(pinputTextField.getText())) { user=uinputTextField.getText(); password=pinputTextField.getText(); email=einputTextField.getText(); Connection con=DatabaseLink.MysqlLink("localhost","database1","root","123456"); Statement sql; try{ sql=con.createStatement(); PreparedStatement st=con.prepareStatement("insert into up values(?,?,?)"); st.setString(1,user); st.setString(2,password); st.setString(3,email); st.executeUpdate(); } catch(Exception e3){ System.out.print(e3); } Frame frame3 = new Frame(); frame3.setSize(170,90); frame3.setResizable(false);//禁止窗口缩放 frame3.setLocationRelativeTo(null); //将窗口放在屏幕最中心 frame3.setLayout(new FlowLayout()); //布局管理 JLabel label = new JLabel(); label.setText("注册成功");//设置显示文字 frame3.add(label); frame3.setVisible(true); frame3.addWindowListener(new WindowAdapter(){ //添加窗口事件监听 public void windowClosing(WindowEvent e){ //窗口关闭方法 frame3.dispose(); } }); } else { Frame frame2 = new Frame(); frame2.setSize(170,90); frame2.setResizable(false);//禁止窗口缩放 frame2.setLocationRelativeTo(null); //将窗口放在屏幕最中心 frame2.setLayout(new FlowLayout()); //布局管理 JLabel label = new JLabel(); label.setText("两次输入的密码不同");//设置显示文字 frame2.add(label); frame2.setVisible(true); frame2.addWindowListener(new WindowAdapter(){ //添加窗口事件监听 public void windowClosing(WindowEvent e){ //窗口关闭方法 frame2.dispose(); } }); } } }); frame.addWindowListener(new WindowAdapter(){ //添加窗口事件监听 public void windowClosing(WindowEvent e){ //窗口关闭方法 frame.dispose(); Loginwindow(); } }); } static void tlitelwindow(){ Frame frame = new Frame(); frame.setSize(170,90); frame.setResizable(false);//禁止窗口缩放 frame.setLocationRelativeTo(null); //将窗口放在屏幕最中心 frame.setLayout(new FlowLayout()); //布局管理 JLabel label = new JLabel(); label.setText("登录成功");//设置显示文字 frame.add(label); frame.setVisible(true); frame.addWindowListener(new WindowAdapter(){ //添加窗口事件监听 public void windowClosing(WindowEvent e){ //窗口关闭方法 frame.dispose(); } }); } static void flitelwindow(){ Frame frame = new Frame(); frame.setSize(170,90); frame.setResizable(false);//禁止窗口缩放 frame.setLocationRelativeTo(null); //将窗口放在屏幕最中心 frame.setLayout(new FlowLayout()); //布局管理 JLabel label = new JLabel(); label.setText("登录账号错误或登录密码错误");//设置显示文字 frame.add(label); frame.setVisible(true); frame.addWindowListener(new WindowAdapter(){ //添加窗口事件监听 public void windowClosing(WindowEvent e){ //窗口关闭方法 frame.dispose(); } }); } static boolean link(String user,String password){ Connection con=DatabaseLink.MysqlLink("localhost","database1","root","123456"); try { Statement sql = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs=sql.executeQuery("select * from up"); while(rs.next()) { if(user.equals(rs.getString(1))&&password.equals(rs.getString(2))) return true; } } catch(SQLException e) { System.out.println(e); } return false; } static void Loginwindow(){ Frame frame = new Frame("登录系统"); frame.setSize(350, 200); Panel panel1=new Panel(); Panel panel2=new Panel(); TextField uinputTextField=new TextField(20); TextField pinputTextField=new TextField(20); panel1.add(uinputTextField); panel2.add(pinputTextField); frame.setResizable(false);//禁止窗口缩放 frame.setLocationRelativeTo(null); //将窗口放在屏幕最中心 frame.setLayout(new FlowLayout()); //布局管理 JLabel label1 = new JLabel(); label1.setText("登录账号:");// 设置显示文字 JLabel label2 = new JLabel(); label2.setText("登录密码:");// 设置显示文字 JButton jb1=new JButton("确定");//设置确定按钮 JButton jb2=new JButton("注册"); jb1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { user=uinputTextField.getText(); password=pinputTextField.getText(); if(link(user,password)) tlitelwindow(); else flitelwindow(); } }); jb2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { frame.dispose(); enroll(); } }); frame.add(label1); frame.add(panel1); frame.add(label2); frame.add(panel2); frame.add(jb1); frame.add(jb2); frame.setVisible(true); //显示窗口 frame.addWindowListener(new WindowAdapter(){ //添加窗口事件监听 public void windowClosing(WindowEvent e){ //窗口关闭方法 System.exit(0); } }); } public static void main(String args[]){ Loginwindow(); } }

程序所有窗口如下



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3