当前位置: 首页 > news >正文

java聊天室案例改进(建立与数据库的连接)

前言:

本篇博客在之前的聊天案例上加入了与数据库连接,将用户的账户和密码存储在数据库中,

登录时验证用户是否创建账户,注册时验证用户是否创建已有账户

如果需要完整代码的同学,后台私信博主

聊天案例完整代码链接如下:

https://blog.csdn.net/Vaclee/article/details/146240268?spm=1001.2014.3001.5501

目录

一.在数据库中创建一个chatdb数据库和user_student表

二.将数据库驱动导入项目中

1.在项目中创建一个文件夹

2.将驱动导入lib文件中

3.将sql驱动导入到项目中

4.建立与数据库的连接

三.注册页面加入数据库

四.在登录页面加入数据库验证


一.在数据库中创建一个chatdb数据库和user_student表

注意账户是不能重复的,应该加入相应的约束

代码如下:

create database if not exists chatdb charset utf8create table user_student(id int primary key auto_increment,account varchar(10) not null unique,password varchar(10) not null,regtime date not null
)

二.将数据库驱动导入项目中

博主这里用的是mysql,有需要驱动的同学可以私信博主

1.在项目中创建一个文件夹

2.将驱动导入lib文件中

将驱动文件拖入lib中即可

3.将sql驱动导入到项目中

4.建立与数据库的连接

由于我们每次使用数据库都需要建立与数据库的链接,所以可以将与数据库连接的代码封装成一个类,提高代码的复用性

这里需要注意的是java与数据库连接遵循的是TCP协议,所以说ip和端口,时区都不能写错,否则会连接失败

public class JdbcUtil {//对数据库连接进行封装,符合面向对象语言的特性,增加代码的复用性private static String url = "jdbc:mysql://127.0.01:3306/schooldb?           serverTimezone=Asia/Shanghai";//jdbc:数据库://ip:端口/具体的数据库名?时区private static String user = "root";//数据库账户private static String dbpwd = "root";//数据库密码public static Connection getconnection()throws SQLException {Connection connection = DriverManager.getConnection(url,user,dbpwd);return connection;}
}

三.注册页面加入数据库

1.首先对注册按钮加入事件

2.建立与数据库连接

3.获取文本框内容

4.查询账户是否在已经存在,如果存在提醒用户直接登录,如果不存在添加到数据库中

button1.addActionListener(new AbstractAction(){@Overridepublic void actionPerformed(ActionEvent e){try {String account = textField1.getText();//获取文本框内容String password = textField2.getText();//连接数据库Connection connection = JDBCutil.getconnection();//首先查询是否已经有改账户PreparedStatement p = connection.prepareStatement("select id from user_student where account = ?");p.setObject(1, account);ResultSet resultSet = p.executeQuery();if (resultSet.next() == false) {p = connection.prepareStatement("insert into user_student(account,password,regtime)value(?,?,?)");p.setObject(1, account);p.setObject(2, password);p.setObject(3, new Date());p.executeUpdate();JOptionPane.showMessageDialog(null, "注册成功", "来自系统的提示", JOptionPane.WARNING_MESSAGE);new LoginFrame();} else {JOptionPane.showMessageDialog(null, "账户已经存在请直接登录", "来自系统的提示", JOptionPane.WARNING_MESSAGE);return;}p.close();resultSet.close();connection.close();}catch(SQLException k){System.out.println("数据库连接失败");k.printStackTrace();}}
});

四.在登录页面加入数据库验证

1.首先对注册按钮加入事件

2.建立与数据库连接

3.获取文本框内容

4.查询账户是否在已经存在,如果存在判断密码是否正确,如果正确直接登录,否则提醒用户密码错误,如果不存在提醒用户注册

loginbtn.addActionListener(new AbstractAction() {@Overridepublic void actionPerformed(ActionEvent e) {//事件监听try {String account = accountFiled.getText();//获取文本框内容String password = passwordFiled.getText();if (password.equals("")) {JOptionPane.showMessageDialog(null, "密码不能为空", "来自系统的提示", JOptionPane.WARNING_MESSAGE);return;}if (account.equals("")) {JOptionPane.showMessageDialog(null, "账户不能为空", "来自系统的提示", JOptionPane.WARNING_MESSAGE);//(,内容,标题,警告类型);return;}//连接数据库Connection connection = JDBCutil.getconnection();//首先查询是否已经有改账户PreparedStatement p = connection.prepareStatement("select id from user_student where account = ?");p.setObject(1,account);ResultSet resultSet = p.executeQuery();if(resultSet.next()==false){JOptionPane.showMessageDialog(null, "账户不存在请注册!", "来自系统的提示", JOptionPane.WARNING_MESSAGE);//(,内容,标题,警告类型);return;}else{p = connection.prepareStatement("select id from user_student where account = ? and password = ?");p.setObject(1,account);p.setObject(2,password);ResultSet resultSet1 = p.executeQuery();if (resultSet1.next()==false){JOptionPane.showMessageDialog(null, "密码错误,请重新输入", "来自系统的提示", JOptionPane.WARNING_MESSAGE);//(,内容,标题,警告类型);return;}}p.close();resultSet.close();connection.close();//连接服务器端Socket socket = new Socket("127.0.0.1", 9999);dispose();//释放关闭当前窗口new ChatFrame(accountFiled.getText(),socket).setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}catch(IOException ex){ex.printStackTrace();JOptionPane.showMessageDialog(null,"网络连接失败!","来自系统的提示",JOptionPane.WARNING_MESSAGE);}catch(Exception ex){ex.printStackTrace();//打印异常信息JOptionPane.showMessageDialog(null,"系统忙,请稍后再试!","来自系统的提示",JOptionPane.WARNING_MESSAGE);}}
});

相关文章:

  • Chrome漏洞可窃取数据并获得未经授权的访问权限
  • rac环境下,增加一个控制文件controlfile
  • 从技术本质到未来演进:全方位解读Web的过去、现在与未来
  • Git完全指南:从入门到精通版本控制 ------- Git Flow(10)
  • TDengine 语言连接器(PHP)
  • 用 MongoIndexStore 实现对话存档和恢复 实现“多用户、多对话线程”场景(像一个 ChatGPT 对话列表那样)
  • 什么是分布式锁?
  • java + spring boot + mybatis 通过时间段进行查询
  • 微信小程序文字混合、填充动画有效果图
  • Linux网络协议栈深度解析:从数据封装到子网划分的底层架构
  • 第二篇:linux之Xshell使用及相关linux操作
  • 「数据可视化 D3系列」入门第六章:比例尺的使用
  • 数据结构-栈
  • WebSocket 实现数据实时推送原理
  • Spine-Leaf 与 传统三层架构:全面对比与解析
  • 深入浅出 NVIDIA CUDA 架构与并行计算技术
  • 燕山大学计算机网络之Java实现TCP数据包结构设计与收发
  • ESP-ADF外设子系统深度解析:esp_peripherals组件架构与核心设计(输入类外设之ADC按键 ADC Button)
  • 在 MoonBit 中引入 Elm 架构:用简单原则打造健壮的 Web 应用
  • Day22-前端Web案例——登录退出项目打包部署
  • 证监会:2024年依法从严查办证券期货违法案件739件,作出处罚决定592件、同比增10%
  • 李公明︱一周书记:当前科学观中的盲点、危机与……人类命运
  • 泽连斯基:正在等待俄方确认参加会谈的代表团组成
  • 腾讯一季度营收增长13%,马化腾:战略性的AI投入将带来长期回报
  • 人民日报任平:从汽车产销、外贸大盘看中国经济前景
  • 中国巴西民间推动建立经第三方验证的“森林友好型”牛肉供应链