Java----使用JDBC开发注册和登录功能

目录

1、开发需求

2、环境配置

2.1、配置jar包

2.2、配置jdbc.properties文件

2.3、创建MVC三层包

2.4、存放JDBCUtil类

2.5、mysql创建

3、代码开发

3.1、web层开发

3.2、service层开发

3.3、dao层开发

3.4、登录功能测试

3.5、注册功能测试


1、开发需求

1、完成登录功能。
2、完成注册功能。
3、完成注册的同时不能注册相同的用户名。

2、环境配置

2.1、配置jar包

首先我们需要创建一个web项目工程,然后在web包下的WEB-INF下创建一个lib包,里面放入mysql连接jar包,这里提供了mysql5版本和mysql8版本的jar包,对应的就是mysql的版本,如果是mysql5系列版本的就用5.16的jar包,如果是mysql8系列的版本就用8.0.16版本jar包。

链接:https://pan.baidu.com/s/1loxaN41BXlfdePT_8DDBDw 
提取码:388i

如下图配置 

注意:放入后一定要记得导入,右击jar包点击ADD Library进行导入。

2.2、配置jdbc.properties文件

新建jdbc.properties文件到src目录中,添加以下内容

jdbc.className=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test5
jdbc.username=root
jdbc.password=xxx

2.3、创建MVC三层包

因为开发需要使用MVC三层架构,需要创建相对应的包,如图所示

三层为dao层、service层、web层,bean层用来存放实体类即JavaBean,util是工具类存放的包。

2.4、存放JDBCUtil类

 把下面代码放到util包的JDBCUtil类中

public class JDBCUtil {
    public JDBCUtil() {
    }

    private static String className;
    private static String url;
    private static String username;
    private static String password;
    private static Connection conn = null;

    static {
        Properties pro = null;
        InputStream is = null;
        try {
            is = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
            pro = new Properties();
            pro.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        className = pro.getProperty("jdbc.className");
        url = pro.getProperty("jdbc.url");
        username = pro.getProperty("jdbc.username");
        password = pro.getProperty("jdbc.password");
        //加载驱动
        try {
            Class.forName(className);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        //获取连接
        try {
            conn = DriverManager.getConnection(url, username, password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() {
        return conn;
    }

    public static void close(ResultSet rs, Statement stmt, Connection conn) {
        try {
            if (rs != null) {
                rs.close();
                rs = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (stmt != null) {
                stmt.close();
                stmt = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (conn != null) {
                conn.close();
                conn = null;
            }

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

    public static void close(Statement stmt, Connection conn) {
        try {
            if (stmt != null) {
                stmt.close();
                stmt = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (conn != null) {
                conn.close();
                conn = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

2.5、mysql创建

 创建表t_user

CREATE TABLE `t_user` (
  `username` varchar(20) NOT NULL,
  `password` varchar(20) NOT NULL,
  PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

数据请自行添加

3、代码开发

3.1、web层开发

为了模拟前端发送数据,我这里用scanner对进行获取数据,实际开发中web层是用servlet技术来获取前端数据的。

public class UserWeb {
    public static void main(String[] args) {
        //创建service对象
        UserService userService=new UserServiceImpl();
        System.out.println("请选择选项");
        System.out.println("1-----登录");
        System.out.println("2-----注册");
        Scanner sc =new Scanner(System.in);
        int i = sc.nextInt();
        switch (i){
            case 1:
                System.out.println("请输入账号");
                Scanner sc1=new Scanner(System.in);
                String username = sc1.nextLine();
                System.out.println("请输入密码");
                Scanner sc2=new Scanner(System.in);
                String password = sc2.nextLine();
                //创建user对象 把用户输入的账号密码封装对象
                User user=new User();
                user.setUsername(username);
                user.setPassword(password);
                boolean flag1 = userService.login(user);

                if(flag1==true){
                    System.out.println("登录成功");
                }else {
                    System.out.println("登录失败");
                }
                break;
            case 2:
                System.out.println("请输入注册账号");
                Scanner register1=new Scanner(System.in);
                String s1 = register1.nextLine();
                System.out.println("请输入注册密码");
                Scanner register2=new Scanner(System.in);
                String s2 = register2.nextLine();
                User user1=new User();
                user1.setUsername(s1);
                user1.setPassword(s2);
                boolean register = userService.register(user1);
                if(register){
                    System.out.println("注册成功");
                }else{
                    System.out.println("注册失败,用户已存在");
                }
                break;
            default:
                System.out.println("你输入的有误");
        }
    }

}

3.2、service层开发

service层和dao层一样,也是一个接口和一个实现类

UserService接口

public interface UserService {
    //登录功能
    public boolean login(User user);
    //注册功能
    public boolean register(User user);
}

UserServiceImpl实现类 

public class UserServiceImpl implements UserService {
    //登录功能
    @Override
    public boolean login(User user) {
        //创建userDao对象
        UserDao userDao=new UserDaoImpl();
        //调用login方法把参数user传递过去,得到一个返回值为user_data
        User user_data = userDao.login(user);
        //判断user_data是否为空
        if(user_data!=null){
            //不为空  证明查询出了用户 登录成功
            return true;
        }
        //否则登录失败
        return false;
    }

    //注册功能
    @Override
    public boolean register(User user) {
        UserDao userDao=new UserDaoImpl();
        //调用userDao中的queryByName方法里面传递一个用户名 得到返回值user1
        User user1 = userDao.queryByName(user.getUsername());
        //判断user1是否为空 
        if(user1!=null){
            //不为空 证明用户存在 不能注册
            return  false;
        }else{
            //为空 则可以注册 调用注册方法
            Boolean register = userDao.register(user);
            //判断返回值是否注册成功
            if(register){
                //成功则返回true
                return true;
            }else{
                //否则返回false
                return false;
            }
        }
    }
}

3.3、dao层开发

创建UserDao接口

public interface UserDao {
    //登录方法
    public User login(User user);
    //注册方法
    public Boolean register(User user);
    //查询用户方法
    public User queryByName(String username);
}

在dao层创建一个impl包,用来存放接口的实现类

实现类代码

public class UserDaoImpl implements UserDao {
    //登录功能
    @Override
    public User login(User user) {
        //调用工具类获取连接对象
        Connection conn = JDBCUtil.getConnection();
        //初始化对象
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            // Statement stmt = conn.createStatement();
            // String sql="select * from t_user where username='"+user.getUsername()+"' and password='"+user.getPassword()+"'";
            // ResultSet rs = stmt.executeQuery(sql);
            //解决sql注入问题
            String sql = "select * from t_user where username= ? and password = ?";
            //把sql语句传递给pstmt对象
            pstmt = conn.prepareStatement(sql);
            //给占位符赋值
            pstmt.setString(1, user.getUsername());
            pstmt.setString(2, user.getPassword());
            //调用查询方法
            rs = pstmt.executeQuery();
            //对结果进行遍历
            while (rs.next()) {
                String username = rs.getString("username");
                String password = rs.getString("password");
                User user1 = new User();
                user1.setUsername(username);
                user1.setPassword(password);
                //返回结果
                return user1;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //释放资源
            JDBCUtil.close(rs, pstmt, conn);
        }
        return null;
    }

    //注册功能
    @Override
    public Boolean register(User user) {
        Connection conn = JDBCUtil.getConnection();
        // Statement stmt = null;
        PreparedStatement pstmt= null;
        // stmt = conn.createStatement();
        // String sql = "select * from t_user where username='" + user.getUsername() + "'";
        // rs = stmt.executeQuery(sql);
        try {
            // String sql = "insert into t_user value('" + user.getUsername() + "','" + user.getPassword() + "')";
            String sql2 = "insert into t_user value(?,?)";
            pstmt = conn.prepareStatement(sql2);
            pstmt.setString(1, user.getUsername());
            pstmt.setString(2, user.getPassword());
            int i;
            i = pstmt.executeUpdate();
            if (i == 1) {
                return true;
            } else {
                return false;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.close(pstmt, conn);
        }
        //以上try里面出现错误直接返回false
        return false;
    }

    @Override
    public User queryByName(String username) {
        Connection conn = JDBCUtil.getConnection();
        ResultSet rs;
        PreparedStatement pstmt;
        String sql1 = "select * from t_user where username=?";
        try {
            pstmt = conn.prepareStatement(sql1);
            pstmt.setString(1, username);
            rs = pstmt.executeQuery();
            while(rs.next()){
                String username1 = rs.getString("username");
                String password = rs.getString("password");
                User user=new User();
                user.setUsername(username1);
                user.setPassword(password);
                return user;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
}

3.4、登录功能测试

运行UserWeb

 

3.5、注册功能测试

 

 

猜你喜欢

转载自blog.csdn.net/select_myname/article/details/126721984