建立java和sql的连接(为聊天窗口添加注册功能)

建立java和sql的连接(为聊天窗口添加注册功能)

1.1首先需要导入mysql的相关包,将下好的jar文件拖入在src中新建立的lib文件夹(directory)里面,然后将lib进行add as library就算导入成功了

2.1明确dao是什么

DAO(Data Access Object) 数据访问对象,就是写一个类,把访问数据库的代码封装起来,DAO在数据库与业务逻辑(Service)之间。

Dao是数据访问层,Dao的作用是封装对数据库的访问:增删改查,不涉及业务逻辑,只是达到按某个条件获得指定数据的要求。

不同类有不同的dao,我们需要创建一个regdao也就是注册dao,当用户输入进来账户和密码后进入封装起来的regdao,然后在regdao这个类里面经过代码的命令保存进sql

2.2连接代码部分

首先登录sql

java 复制代码
DriverManager.registerDriver(new Driver());
        String url="jdbc:mysql://127.0.0.1:3306/ChatRoom_db?serverTimezone=Asia/Shanghai";
        String user="root"; //账户
        String psd="root"; //密码

然后建立于数据库的连接,然后根据mysql的语法用PreparedStatement将账号密码和注册时间保存进sql。当然这过程中会有异常,但是我们只用找到异常不用catch处理异常,我们要抛出到注册窗口的类中去来解决异常,因为一旦在regdao里面处理异常,那注册窗口类中就不会显示异常,也就不能做出相应的异常出现窗口来提示用户网络连接中断等问题。

java 复制代码
connection = DriverManager.getConnection(url,user,psd);
            ps=connection.prepareStatement("insert into user (account,password,reg_time)value(?,?,?)");
            ps.setObject(1,account);
            ps.setObject(2,password);
            ps.setObject(3,new Date());//注册时间
            ps.executeUpdate();
            ps.close();
            connection.close();

这时候有产生一个问题,当这些代码运行时出现异常,ps和connection就关闭不了了,所以不论上述代码运行异常与否,close是一定要执行的,这时候我们想到可以用finally,把close放到finally最后执行。这时候Connection和PrepareStatement的声明就要在try的外面声明,这样子在finally中也能用到

完整代码如下:

java 复制代码
public class Regdao {
    public  void saveUser(String account,String password) throws ClassNotFoundException, SQLException {
        DriverManager.registerDriver(new Driver());
        String url="jdbc:mysql://127.0.0.1:3306/ChatRoom_db?serverTimezone=Asia/Shanghai";
        String user="root"; //账户
        String psd="root"; //密码

        //在外面声明可以在finally里用到
        Connection connection=null;
        PreparedStatement ps=null;
        try{
            //建立与数据库的链接
            connection = DriverManager.getConnection(url,user,psd);
            ps=connection.prepareStatement("insert into user (account,password,reg_time)value(?,?,?)");
            ps.setObject(1,account);
            ps.setObject(2,password);
            ps.setObject(3,new Date());//注册时间
            ps.executeUpdate();
        }finally {
            if(ps!=null){
                ps.close();
            }
            if(connection!=null){
                connection.close();
            }
        }
    }
}
2.3注册窗口代码部分:

首先就是排版,这里不多赘述:

java 复制代码
this.setTitle("欢迎注册");
        this.setSize(500,350);
        this.setLocationRelativeTo(null);//居中
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口时退出程序
        this.setResizable(false);//禁止窗口拖拽

        JPanel jPanel=new JPanel();
        JLabel jLabel=new JLabel("欢迎注册");
        jLabel.setFont(new Font("横体", Font.BOLD,30));
        jPanel.add(jLabel);//欢迎登录

        //中间第一个空标签
        JLabel jLabel1=new JLabel();//欢迎登录下面空白部分
        jLabel1.setPreferredSize(new Dimension(500,50));

        //账号
        JLabel jLabelAccount=new JLabel("账号");//账号标签
        jLabelAccount.setPreferredSize(new Dimension(30,30));
        JTextField jTextaccount=new JTextField(15);//账号文本域


        //中间第二个空标签
        JLabel jLabel2=new JLabel();//欢迎登录下面空白部分
        jLabel2.setPreferredSize(new Dimension(500,20));

        //密码
        JLabel jLabelPassword=new JLabel("密码 ");//账号标签
        jLabelPassword.setPreferredSize(new Dimension(30,30));
        JPasswordField jPasswordField=new JPasswordField(15);

        //中间第二个空标签
        JLabel jLabel3=new JLabel();//欢迎登录下面空白部分
        jLabel3.setPreferredSize(new Dimension(500,20));

        //按钮
        JButton ButtonSign=new JButton("注册");

        jPanel.add(jLabel1);
        jPanel.add(jLabelAccount);
        jPanel.add(jTextaccount);
        jPanel.add(jLabel2);
        jPanel.add(jLabelPassword);
        jPanel.add(jPasswordField);
        jPanel.add(jLabel3);
        jPanel.add(ButtonSign);
        this.add(jPanel);
        this.setVisible(true);

然后是给注册按钮添加功能,当按完注册按钮后判断账号密码是不是输入的符合规定,然后如果符合的话建立与sql的连接也就是创建regdao对象,然后跳转到登录窗口

java 复制代码
 //按钮
        ButtonSign.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String account = jTextaccount.getText();
                String password = new String(jPasswordField.getPassword());
                if(account.length()==0){
                    JOptionPane.showMessageDialog(null,"账号不能为空!");
                    return;
                }
                if(password.length()==0){
                    JOptionPane.showMessageDialog(null,"密码不能为空!");
                    return;
                }
                try{
                    // 将数据保存到用户表 dao-->data access object java中的代码是分层的,按不同的功能进行划分
                    Regdao regdao=new Regdao();
                    regdao.saveUser(account,password);
                    JOptionPane.showMessageDialog(null,"注册成功!");
                    new LoginWindow();
                    dispose();
                } catch (ClassNotFoundException | SQLException classNotFoundException) {
                    classNotFoundException.printStackTrace();
                    JOptionPane.showMessageDialog(null,"注册失败!");
                }
            }
        });
相关推荐
浮游本尊14 小时前
Java学习第22天 - 云原生与容器化
java
渣哥15 小时前
原来 Java 里线程安全集合有这么多种
java
间彧16 小时前
Spring Boot集成Spring Security完整指南
java
间彧16 小时前
Spring Secutiy基本原理及工作流程
java
Java水解17 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆19 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学20 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole20 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端
华仔啊20 小时前
基于 RuoYi-Vue 轻松实现单用户登录功能,亲测有效
java·vue.js·后端