JDBC案列

JDBC的编程步骤

  1. 第一步:注册驱动(告诉Java程序,即将要连接那个品牌的数据库)
  2. 第二步:获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,重量级的,使用完后一定要关闭)
  3. 第三步:获取数据库操作对象(专门执行sql语句的对象)
  4. 第四步:执行SQL语句(DQL DML ...)
  5. 第五步:处理查询结果集(只有第四步执行select语句时,才会执行第五步)

PreparedStatement相比相对于Statement的优点

  1. PreparedStatement有助于防止SQL注入攻击,因它会自动对特殊字符转义; 
  2.  PreparedStatement可以用来进行动态查询;
  3. PreparedStatement执行更快。
  4. 使用PreparedStatement的setter方法更容易写出面向对象的代码,而Statement的话,我们得拼接字符串来生成查询语句,如果参数过多得情况下,字符串拼接容易出错。
  5. 在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以PreparedStatement代替Statement.也就是说,在任何时候都不要使用Statement. 

案列sql版的判断登录

 

Connection conn = null;
        PreparedStatement psm = null;
        ResultSet rs =null;
        try{
            //注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //建立连接
            String url = "jdbc:mysql://127.0.0.1:3306/girls?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false";
            conn = DriverManager.getConnection(url,"root","panther9985");

            //生成执行对象
            //Statement stam = conn.createStatement();
            psm = conn.prepareStatement("?");
            //写sql语句执行
            String sql  = "select * from user";
            //接受sql执行的语句
             rs =psm.executeQuery(sql);
            String[] number = new String[3];
            String[] password = new String[3];
            int i=0;
            while(rs.next()){
                number[i] = rs.getString(2);
                password[i] = rs.getString(3);
                i++;
            }
            Scanner sc = new Scanner(System.in);
            for(int j =0; j < 5; j++){
                System.out.println("请输入账号");
                String UserNumber =sc.nextLine();
                System.out.println("请输入密码");
                String UserPassword = sc.nextLine();
                for(int k =0; k < 3; k++){
                    if(UserNumber.equals(number[k])&&UserPassword.equals(password[k])){
                        System.out.println("登录成功");
                        return;
                    }else if(UserNumber.equals(number[k])){
                        System.out.println("密码输入错误");
                    }else if(UserPassword.equals(password[k])){
                        System.out.println("账号不存在");
                        break;
                    }else{
                        System.out.println("输入错误");
                        break;
                    }
                }
                System.out.println("还剩"+(4-j)+"次机会");
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            assert rs != null;
            rs.close();
            psm.close();
            conn.close();
        }

 

posted @ 2022-04-19 12:38  panther125  阅读(55)  评论(0)    收藏  举报