建立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,"注册失败!");
                }
            }
        });
相关推荐
巨人张4 分钟前
信息素养Python编程题
开发语言·python
东阳马生架构6 分钟前
订单初版—5.售后退货链路中的技术问题说明文档
java
小小寂寞的城11 分钟前
JAVA策略模式demo【设计模式系列】
java·设计模式·策略模式
阿猿收手吧!28 分钟前
【计算机网络】HTTP1.0 HTTP1.1 HTTP2.0 QUIC HTTP3 究极总结
开发语言·计算机网络
JAVA学习通29 分钟前
图书管理系统(完结版)
java·开发语言
abigalexy36 分钟前
深入Java锁机制
java
paishishaba36 分钟前
处理Web请求路径参数
java·开发语言·后端
七七七七0737 分钟前
C++类对象多态底层原理及扩展问题
开发语言·c++
神仙别闹38 分钟前
基于Java+MySQL实现(Web)可扩展的程序在线评测系统
java·前端·mysql