Java Swing连接SQL Server实现简易登录注册系统

林见深
林见深
发布时间:2026-10-13| 2人浏览过
原创

本代码示例整合了Java Swing图形界面开发、JDBC数据库连接、单例模式以及正则表达式校验技术。旨在通过一个简易的登录注册小程序,展示如何构建基础的用户管理模块,加深对各部分知识点在实际应用中协同作用的印象。

功能介绍

本系统主要包含登录与注册两个核心功能: 1. 登录流程:输入用户名和密码后,系统自动连接数据库进行比对。匹配成功则提示登录成功,否则给出错误提示。 2. 注册流程:点击注册按钮进入新用户信息填写界面。利用正则表达式严格校验用户名(3-6位)、密码(固定6位)、姓名(2-4汉字)及学号(3-6位数字)。验证通过后检查数据库中该用户名是否已存在,若未占用则写入数据完成注册。

关键代码解析

第1步:构建主窗口界面

UserRegister.java负责创建初始窗口,放置输入框与操作按钮,并处理基本的点击事件监听。

package package1; 
/* 
 * 功能:登录界面带着注册功能,弹出注册界面。 
 * 将注册的信息保存在数据库中,并且可以进行登录操作。 
 * author:ywq 
 */ 
import javax.swing.*; 
 
import java.awt.*; 
import java.awt.event.*; 
import java.sql.*; 
 
public class UserRegister extends JFrame implements ActionListener{ 
  
 //定义登录界面的组件 
  JButton jb1,jb2,jb3=null; 
  JRadioButton jrb1,jrb2=null; 
  JPanel jp1,jp2,jp3=null; 
  JTextField jtf=null; 
  JLabel jlb1,jlb2=null; 
  JPasswordField jpf=null; 
    
  
 public static void main(String[] args) 
 { 
  UserRegister ur=new UserRegister(); 
 } 
  
 public UserRegister() 
 { 
  //创建组件 
   //创建组件 
  jb1=new JButton("登录"); 
  jb2=new JButton("注册"); 
  jb3=new JButton("退出"); 
  //设置监听 
  jb1.addActionListener(this); 
  jb2.addActionListener(this); 
  jb3.addActionListener(this); 
   
  jlb1=new JLabel("用户名:"); 
  jlb2=new JLabel("密 码:"); 
   
  jtf=new JTextField(10); 
  jpf=new JPasswordField(10); 
   
  jp1=new JPanel(); 
  jp2=new JPanel(); 
  jp3=new JPanel(); 
   
  jp1.add(jlb1); 
  jp1.add(jtf); 
   
  jp2.add(jlb2); 
  jp2.add(jpf); 
   
  jp3.add(jb1); 
  jp3.add(jb2); 
  jp3.add(jb3); 
  this.add(jp1); 
  this.add(jp2); 
  this.add(jp3); 
   
  this.setVisible(true); 
  this.setResizable(false); 
  this.setTitle("注册登录界面"); 
  this.setLayout(new GridLayout(3,1)); 
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

第2步:实现注册页面的字段校验

UI.java用于注册界面的显示与逻辑判断。在提交前,程序通过正则表达式对各项输入内容进行合法性检查,防止无效数据进入数据库。

package package1; 
 
import java.awt.event.*; 
import java.awt.*; 
 
import javax.swing.*; 
 
/* 
 * 注册界面。 
 */ 
class UI extends JFrame implements ActionListener{ 
 
 //定义组件 
 JFrame jf; 
 JPanel jp; 
 JLabel jl1,jl2,jl3,jl4; 
 JTextField jtf1,jtf2,jtf3,jtf4; 
 JButton jb1,jb2; 
  
 public UI() 
 { 
  //初始化组件 
  jf=new JFrame(); 
  jp=new JPanel(); 
  jl1=new JLabel("请输入用户名:"); 
  jtf1=new JTextField(10); 
  jtf1.setToolTipText("用户名必须为3-6位字母_或者数字"); 
  jl2=new JLabel("请输入密码:"); 
  jtf2=new JTextField(10); 
  jtf2.setToolTipText("密码必须为6位字母_或者数字"); 
  jl3=new JLabel("请输入姓名:"); 
  jtf3=new JTextField(10); 
  jtf3.setToolTipText("姓名必须汉字2-4位"); 
  jl4=new JLabel("请输入学号:"); 
  jtf4=new JTextField(10); 
  jtf4.setToolTipText("学号必须为3-6位数字"); 
   
  jb1=new JButton("返回"); 
  jb1.setToolTipText("点我返回登录界面哦"); 
  jb2=new JButton("注册"); 
  jb1.addActionListener(this); 
  jb2.addActionListener(this); 
   
  jp.setLayout(new GridLayout(5,2)); 
   
  jp.add(jl1); 
  jp.add(jtf1); 
   
  jp.add(jl2); 
  jp.add(jtf2); 
   
  jp.add(jl3); 
  jp.add(jtf3); 
   
  jp.add(jl4); 
  jp.add(jtf4); 
   
  jp.add(jb1); 
  jp.add(jb2); 
   
  this.add(jp); 
  this.setTitle("注册界面"); 
  this.setBounds(200, 100, 250, 150); 
  this.setVisible(true); 
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//  this.setResizable(false); 
   

 } 

 public void actionPerformed(ActionEvent e) { 
  
  if(e.getActionCommand()=="返回") 
  { 
   this.dispose(); 
   new UserRegister(); 

  }else if(e.getActionCommand()=="注册") 
  { 
    //调用注册方法 
   this.zhuce(); 
    
  } 
   
 } 
 public void zhuce() 
 { 
  String regex1="\\w{3,6}"; //用户名必须是3-6位 
  boolean flag1=jtf1.getText().matches(regex1); 
   
  String regex2="\\w{6}"; //密码必须是6位 
  boolean flag2=jtf2.getText().matches(regex2); 
   
  String regex3="[\\u4e00-\\u9fa5]{2,4}"; //姓名必须是汉字2-4个字 
  boolean flag3=jtf3.getText().matches(regex3); 
   
  String regex4="\\d{3,6}"; //学号必须是3-6位 
  boolean flag4=jtf4.getText().matches(regex4); 
   
//  if(jtf1.getText()==null||jtf2.getText()==null||jtf3.getText()==null||jtf4.getText()==null) 
  if(flag1==false) 
  { 
   JOptionPane.showMessageDialog(null, "用户名填写错误,必须为3-6位字母_或者数字", "提示信息", JOptionPane.WARNING_MESSAGE); 
   jtf1.setText(""); 
  }else if(flag2==false) 
  { 
   JOptionPane.showMessageDialog(null, "密码填写错误,必须为6位字母_或者数字", "提示信息", JOptionPane.WARNING_MESSAGE); 
   jtf2.setText(""); 
  }else if(flag3==false) 
  { 
   JOptionPane.showMessageDialog(null, "姓名填写错误,必须汉字2-4位", "提示信息", JOptionPane.WARNING_MESSAGE); 
   jtf3.setText(""); 
  }else if(flag4==false) 
  { 
   JOptionPane.showMessageDialog(null, "学号填写错误,必须为3-6位数字", "提示信息", JOptionPane.WARNING_MESSAGE); 
   jtf4.setText(""); 
  }else 
  {    
   //调用注册方法/先检查要注册的用户名是否存在 
    SQLserver ss=new SQLserver(); 
    ss.ConnectSQL(); 
    ss.ZhuceVerify(jtf1.getText()); 
    
//   ss.UserRegis(jtf1.getText(),jtf2.getText(),jtf3.getText(), jtf4.getText()); 
   this.jtf1.setText(""); 
   this.jtf2.setText(""); 
   this.jtf3.setText(""); 
   this.jtf4.setText(""); 
    
  } 
 } 
  
} 

第3步:封装数据库连接与业务逻辑

SQLserver.java将数据库相关的操作独立封装。使用JDBC技术建立连接,并通过PreparedStatement安全执行SQL语句。其中包含了登录验证、注册执行及重名校验三种核心操作方法。

package package1; 
 
import java.sql.*; 
 
import javax.swing.JOptionPane;
/* 
 * 与数据库相关的操作,单独封装成类 
 */ 
 
class SQLserver { 
 
 Connection ct; 
 PreparedStatement ps; 
 ResultSet rs; 
 String user,pwd; 
  
 //将连接数据库的方法封装为一个方法 
 public void ConnectSQL() 
 { 
  try { 
   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加载驱动 
    
   ct=DriverManager.getConnection("jdbc:odbc:ywq"); //得到连接 
    
   System.out.println("已成功连接数据库..."); 
    
  } catch (Exception e) { 
   // TODO Auto-generated catch block 
   e.printStackTrace(); 
  } 
 } 
  
 //注册用户的方法 
 public void UserRegis(String a,String b,String c,String d) 
 { 
  //创建火箭车 
  try { 
   ps=ct.prepareStatement("insert into users values(?,?,?,?)"); 
   ps.setString(1,a); 
   ps.setString(2,b); 
   ps.setString(3,c); 
   ps.setString(4,d); 
    
   //执行 
   int i=ps.executeUpdate(); 
   if(i==1) 
   { 
    JOptionPane.showMessageDialog(null, "注册成功","提示消息",JOptionPane.WARNING_MESSAGE); 
     
   }else 
   { 
    JOptionPane.showMessageDialog(null, "注册失败","提示消息",JOptionPane.ERROR_MESSAGE); 
   } 
    
    
  } catch (SQLException e) { 
   // TODO Auto-generated catch block 
   e.printStackTrace(); 
  } 
 } 
  
// 登录验证方法 
 public void SQLverify(String a,String b) 
 { 
  try { 
   ps=ct.prepareStatement("select * from users where 用户名=? and 密码=? "); 
   ps.setString(1, a); 
   ps.setString(2, b); 
    
   // ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集 
   rs = ps.executeQuery(); 
    
   if(rs.next()) 
   { 
    user = rs.getString(1); 
    pwd = rs.getString(2); 
    JOptionPane.showMessageDialog(null, "登录成功!!!", "提示消息", JOptionPane.WARNING_MESSAGE); 
    System.out.println("成功获取到密码和用户名from数据库"); 
    System.out.println(user + "\t" + pwd + "\t"); 
   }else 
   { 
    JOptionPane.showMessageDialog(null, "用户名或者密码错误,请重新输入!", "提示消息", JOptionPane.ERROR_MESSAGE); 
     
   } 
    
  } catch (SQLException e) { 
    
   e.printStackTrace(); 
  } 
 } 
  
 //注册验证方法,判断用户名是否已经存在 
 public void ZhuceVerify(String a) 
 { 
  try { 
   ps=ct.prepareStatement("select * from users where 用户名=?"); 
//   System.out.println(ps); 
   ps.setString(1, a); 
    
   rs=ps.executeQuery(); 
   if(rs.next()) 
   { 
    JOptionPane.showMessageDialog(null, "该用户名已经存在", "提示信息", JOptionPane.WARNING_MESSAGE); 
   }else 
   { 
//    进行注册 
    UI ui=new UI(); 
    this.UserRegis(ui.jtf1.getText(),ui.jtf2.getText(),ui.jtf3.getText(), ui.jtf4.getText()); 
   } 
    
  } catch (SQLException e) { 
    
   e.printStackTrace(); 
  } 
 } 

} 

总结与注意事项

上述代码提供了一个完整的Java桌面应用基础框架。在实际生产环境中,建议注意以下几点:
- 驱动替换:示例中使用了旧的JDBC-ODBC桥接驱动,现代Java环境建议使用更直接的JDBC驱动(如Microsoft SQL Server JDBC Driver)。
- 资源释放:当前演示代码为了简洁未显式关闭Connection和Statement对象,实际项目中应在finally块中确保资源正确释放。
以上就是Java简易登录注册小程序的详细内容,更多关于Java Swing数据库操作的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。