4-22复习

/*

		* 需求:
			1. 通过键盘录入用户名和密码
			2. 判断用户是否登录成功
 */
public class JdbcDemo11 {
    public static void main(String[] args) {
        //1.键盘录入 接受用户名和密码
        Scanner sc= new Scanner(System.in);
        System.out.println("请输入用户名");
        String username = sc.nextLine();
        System.out.println("请输入密码");
        String password = sc.nextLine();
        //2.调用方法 返回Boolean
        boolean flag = new JdbcDemo11().login02(username,password);
        //3.判断结果 输出语句
        if (flag=true){
            System.out.println("登陆成功");
        }else{
            System.out.println("用户名或者密码错误");
        }
    }


    //登录方法
    public static boolean  login02(String username, String password){
        if (username==null&&password==null){
            return  false;
        }
        /*连接数据库来判断是否登陆成功
         * select * from user where username = '"+username+"' and password = '"+password+"';
         * 如果这个sql有查询结果,则成功,反之,则失败
         */
//1.获取数据库连接
        Connection conn=null;
        PreparedStatement pstmt=null;
        ResultSet rs=null;
        try {
             conn = JdbcUtils.getConnection();
            //2.定义sql
            String sql = "select * from user where username = ? and password = ?";
            //3.获取执行sql的对象
             pstmt = conn.prepareStatement(sql);
            //给问号赋值
            pstmt.setString(1,username);
            pstmt.setString(2,password);
            //4、执行查询  返回结果集resultSet对象
            rs = pstmt.executeQuery(); //这里不需要传递sql了
            //5.判断
            /*if (rs.next()){ //如果有下一行则返回true
                return  true;
            }else{
                return  false;  //
            }*/
            return rs.next();  //游标下移一行有数据true 无数据返回false
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            JdbcUtils.close(rs,pstmt,conn);
        }
        return false;  //这里的false相对与上面的如果出现了异常就返回这个false 因为之前的先判断
    }
}

 

//jdbc工具类   JDBCUtils类  一个是获取连接的一个是释放资源的
public class JDBCUtils {
    //把需要的三个变量 url user password原来是局部变量 我们在成员变量位置声明 如何静态代码块来赋值 下面就可以直接使用了
    private static String url; //为什么这里加了static静态 因为只有静态的变量才能被静态代码块所使用
    private  static String user;
    private  static String password;
    private  static String driver;


    //使用配置文件的方式  使用静态代码块 因为静态代码块会随着类的加载而加载而且只会执行一次
    static{//用静态代码块来读取配置文件来获取值
        try {
            //1.用Properties集合类比较简单
            Properties pro =new Properties();
            pro.load(new FileReader("C:\\IdeaProject\\itcast\\day04-jdbc\\src\\cn\\itcast\\utils\\jdbc.properties")); //load可以记载字节流也可以是字符流进内存 这里加进去的是字符流
            //获取数据赋值
            url =pro.getProperty("url");
            user=pro.getProperty("user");
            password=pro.getProperty("password");  //这里面的名称要与配置文件中键的名称一样
            driver=pro.getProperty("driver");
            //注册驱动
            try {
                Class.forName(driver);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();  //forName的异常抓出来
            }
        } catch (IOException e) {  //load的异常抓出来
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws  SQLException {   //工具类用静态方法直接类名点来调用
        return DriverManager.getConnection(url, user, password);
    }
    public static void close(Connection conn){  //这个是一个重载
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static  void close(Connection conn, Statement stmt, ResultSet result){
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            stmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            result.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值