前言:
本篇博客在之前的聊天案例上加入了与数据库连接,将用户的账户和密码存储在数据库中,
登录时验证用户是否创建账户,注册时验证用户是否创建已有账户
如果需要完整代码的同学,后台私信博主
聊天案例完整代码链接如下:
https://blog.csdn.net/Vaclee/article/details/146240268?spm=1001.2014.3001.5501
目录
一.在数据库中创建一个chatdb数据库和user_student表
二.将数据库驱动导入项目中
1.在项目中创建一个文件夹
2.将驱动导入lib文件中
3.将sql驱动导入到项目中
4.建立与数据库的连接
三.注册页面加入数据库
四.在登录页面加入数据库验证
注意账户是不能重复的,应该加入相应的约束
代码如下:
create database if not exists chatdb charset utf8
create 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,有需要驱动的同学可以私信博主
将驱动文件拖入lib中即可
由于我们每次使用数据库都需要建立与数据库的链接,所以可以将与数据库连接的代码封装成一个类,提高代码的复用性
这里需要注意的是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(){
@Override
public 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() {
@Override
public 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);
}
}
});