JDBC实现注册登陆案例(注册功能statement与preparedstatement的不同写法)

注册:

statement写法 :

public class Register {

    public static void main(String[] args) throws SQLException {
        //创建键盘录入对象(扫描器)
        Scanner sc = new Scanner(System.in);
        //创建数组用于存放账号
        ArrayList<String> list = new ArrayList<>();
        //调用工具类获得连接
        Connection connection = JdbcUtils.getConnection();
        //创建发送器
        Statement st = connection.createStatement();
        while (true) {
            System.out.println("请输入注册账号");
            String name = sc.nextLine();
            System.out.println("请输入密码");
            String password = sc.nextLine();
            //遍历表数据
            String sql = "SELECT * FROM user;";
            ResultSet rs = st.executeQuery(sql);
            while (rs.next()) {
                String name1 = rs.getString("name");
                //将账号添加进list集合
                list.add(name1);
            }
            //如果list集合包含账号,需要重新注册
            if (list.contains(name)) {
                System.out.println("该账号已经被注册,请重新注册");
                continue;
            } else {
                String sq2 = "insert into user(name,password)values('" + name + "','" + password + "')";
                int num = st.executeUpdate(sq2);
                System.out.println("恭喜注册成功");
                JdbcUtils.close(st, connection);
                break;
            }
        }
    }
}

preparedstatement的作用:
1.解决statement存在的注入问题
2.提高程序可读性
3.一条sql语句重复执行多次时,提高效率
(MySQL 不明显,Oracle 非常明显)

备注:此文章有用到工具类,工具类在其他的文章里,如有需要自行搜索,请谅解

preparedstatement写法 :

public class Register {

    public static void main(String[] args) throws SQLException {
        //创建键盘录入对象(扫描器)
        Scanner sc = new Scanner(System.in);
        //创建数组用于存放账号
        ArrayList<String> list = new ArrayList<>();
        //调用工具类获得连接
        Connection connection = JdbcUtils.getConnection();
        //创建发送器
        Statement st = connection.createStatement();
        while (true) {
            System.out.println("请输入注册账号");
            String name = sc.nextLine();
            System.out.println("请输入密码");
            String password = sc.nextLine();
            //遍历表数据
            String sql = "SELECT * FROM user;";
            ResultSet rs = st.executeQuery(sql);
            while (rs.next()) {
                String name1 = rs.getString("name");
                //将账号添加进list集合
                list.add(name1);
            }
            //如果list集合包含账号,需要重新注册
            if (list.contains(name)) {
                System.out.println("该账号已经被注册,请重新注册");
                continue;
            } else {
                //否则,注册成功
                connection = JdbcUtils.getConnection();
                String sq2 = "insert into user(name,password)values(?,?)";
                PreparedStatement ps = connection.prepareStatement(sq2);
                ps.setString(1, name);
                ps.setString(2, password);
                ps.executeUpdate();
                System.out.println("恭喜注册成功");
                //调用工具类关连接
                JdbcUtils.close(st, connection);
                break;
            }
        }
    }
}

登录:

public class Login {
    public static void main(String[] args) throws Exception {
        //创建扫描器
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入账号:");
        String userName = scanner.nextLine();
        System.out.println("请输入密码:");
        String password = scanner.nextLine();
        //把用户名与密码给login方法判断还用户名与密码是否存在
        boolean flag = login(userName,password);

        if(flag){
            //如果返回的是true ,用户名与密码正确
            System.out.println("欢迎:"+ userName+"登陆成功");
        }else{
            System.out.println("用户名不存在或者密码错误!");
        }
    }

    //查询数据库是否存在指定的用户名与密码
    private static boolean login(String userName, String password) throws Exception {
        Connection connection = JDBCUtils.getConnection();
        //获取sql运输器
        String sql = "select * from user where name='"+userName+"' and password='"+password+"'";
        Statement st = connection.createStatement();
        //执行sql
       ResultSet rs = st.executeQuery(sql);
        //如果根据上述用户名与密码能够查询出数据,那么指针可以往下移动,返回tue。如果不能够移动,那么意味着没有查询数据,返回false.
       return rs.next();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42691149/article/details/82086277