MySQL笔记 —— jdbc工具类(网站的修改密码,注册账号,注销账号功能)

Posted 一纸春秋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL笔记 —— jdbc工具类(网站的修改密码,注册账号,注销账号功能)相关的知识,希望对你有一定的参考价值。

在之前的这篇博客里面MySQL笔记 —— jdbc连接数据库(增删改查,sql注入,网站登录检查)
写了网站登录检查的代码,通过将用户输入的用户名和密码与数据库中存储的用户名和密码进行比较,如果一致则登录成功,不一致则登陆失败

现在再给出网站登录列表中的,修改密码,注册账号,注销账号功能

先给出userInfo用户信息表的数据

package mysql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class LoginUpdate {
    public static void main(String[] args) throws Exception {
        System.out.println("修改密码");
        String update = update("654321", "root");
        System.out.println(update);

        System.out.println("注册账号");
        String insert = insert("demo","222222");
        System.out.println(insert);

        System.out.println("注销账号");
        String delete = delete("test");
        System.out.println(delete);

    }

    //修改密码
    public static String update(String password,String username) throws Exception{
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://master:3306/show1", "root", "123456");
        String sql = "update userInfo set password=? where username=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1,password);
        ps.setString(2,username);
        int i = ps.executeUpdate();
        conn.close();
        ps.close();
        if(i!=1){
            return "修改失败";
        }
        return "修改成功";

    }

    //注册账号
    public static String insert(String username,String password) throws Exception{
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://master:3306/show1", "root", "123456");
        String sql = "insert into userInfo values(?,?)";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1,username);
        ps.setString(2,password);
        int i = ps.executeUpdate();
        conn.close();
        ps.close();
        if(i!=1){
            return "注册失败";
        }
        return "注册成功";
    }

    //注销账号
    public static String delete(String username) throws Exception{
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://master:3306/show1", "root", "123456");
        String sql = "delete from userInfo where username=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1,username);
        int i = ps.executeUpdate();
        conn.close();
        ps.close();
        if(i!=1){
            return "注销失败";
        }
        return "注销成功";
    }
}


查询一下数据库里面的表,select * from userInfo;

密码确实被修改了,test用户被注销,新增了一个demo用户

jdbc工具类

现在来思考一个问题,上面代码里面有三个功能,修改密码,注册账号,注销账号。三个功能分别对应三个方法,但是方法内的语句有大量重复的地方,比如获取驱动和获取连接的代码,获取执行器,以及最后关闭的代码其实都是重复的。这不符合我们写代码的精简思想,所以能不能把这些重复的代码都提取出来,放进一个工具类里面。比如将建立连接的代码放入工具类里面,工具类提供给外界一个获取的方法,需要的时候直接调用方法即可。

这个工具类就是jdbc工具类,现在给出工具类的全部代码

package mysql;

import sun.security.util.Password;

import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class JDBCUtil {
    private static String URL;
    private static String DRIVER;
    private static String USERNAME;
    private static String PASSWORD;
    private static Connection conn=null;
    private static PreparedStatement ps=null;
    private static ResultSet rs=null;
    static{
        try{
            //获取配置文件里面的参数信息
            Properties properties = new Properties();
            //利用反射加载配置文件
            InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("mysql.properties");
            //利用Properties对象加载输入流is
            properties.load(is);
            DRIVER=properties.getProperty("driver");
            URL=properties.getProperty("url");
            USERNAME=properties.getProperty("username");
            PASSWORD=properties.getProperty("password");

            //获取驱动
            Class.forName(DRIVER);
            //获取连接
            conn=DriverManager.getConnection(URL,USERNAME,PASSWORD);

        }catch(Exception e){
            e.printStackTrace();
        }
    }

    //获取连接
    public static Connection getConn(){
        return conn;
    }

    //获取执行器
    public static PreparedStatement getPs(String sql){
        try {
            ps = conn.prepareStatement(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return ps;
    }

    //获取查询语句的结果集
    public static ResultSet getRs(){
        try {
            rs=ps.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return rs;
    }

    //获取增删改语句的结果集
    public static int update(){
        int i=0;
        try {
            i=ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return i;
    }

    //给执行器传参
    public static void setPs(String...args){
        try{
            for (int i = 0; i < args.length; i++) {
                ps.setString(i+1,args[i]);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    //关闭
    public static void closeAll(){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(ps!=null){
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

利用工具类,再来重新写一下之前的修改密码,注册账号,注销账号的方法

package mysql;

public class LoginUpdate1 {
    public static void main(String[] args) {
        System.out.println("修改密码");
        String update = update("root", "123456");
        System.out.println(update);
        System.out.println("------------------");
        System.out.println("注册账号");
        String show = insert("show", "333333");
        System.out.println(show);
        System.out.println("------------------");
        System.out.println("注销账号");
        String demo = delete("demo");
        System.out.println(demo);
        JDBCUtil.closeAll();
    }

    public static String update(String username,String password){
        JDBCUtil.getConn();
        String sql = "update userInfo set password=? where username=?";
        JDBCUtil.getPs(sql);
        JDBCUtil.setPs(password,username);
        int i = JDBCUtil.update();
        if(i!=1){
            return "修改失败";
        }
        return "修改成功";
    }

    public static String insert(String username,String password){
        JDBCUtil.getConn();
        String sql = "insert into userInfo values(?,?)";
        JDBCUtil.getPs(sql);
        JDBCUtil.setPs(username,password);
        int i = JDBCUtil.update();
        if(i!=1){
            return "注册失败";
        }
        return "注册成功";
    }

    public static String delete(String username){
        JDBCUtil.getConn();
        String sql = "delete from userInfo where username=?";
        JDBCUtil.getPs(sql);
        JDBCUtil.setPs(username);
        int i = JDBCUtil.update();
        if(i!=1){
            return "注销失败";
        }
        return "注册成功";
    }
}


以上是关于MySQL笔记 —— jdbc工具类(网站的修改密码,注册账号,注销账号功能)的主要内容,如果未能解决你的问题,请参考以下文章

Java JDBC连接MySQL数据库,基础语法及自定义JDBC的MySQL工具类

JDBC实现用于操作数据库Mysql的工具类JDBCTools

JDBC-自定义数据库工具类(DBService)

JavaWeb学习笔记-04jdbc工具类

MyBatis学习笔记 —— 搭建MyBatis项目

JAVAWEB学习笔记08_MySQL&JDBC回顾