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 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,有需要驱动的同学可以私信博主

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

java聊天室案例改进(建立与数据库的连接)_第1张图片

2.将驱动导入lib文件中

将驱动文件拖入lib中即可

java聊天室案例改进(建立与数据库的连接)_第2张图片

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

java聊天室案例改进(建立与数据库的连接)_第3张图片

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(){
            @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);
                }
            }
});

你可能感兴趣的:(数据库,java)