JDBC练习登陆案例和JDBC事务管理

JDBC练习登陆案例

需求:

  1.通过键盘录入用户名和密码

  2.判断用户是否登录成功

​     select * from user where username = “” and password = “”;
    如果这个sql有查询结果,则成功,反之则失败

 步骤:

  1、创建数据库表user

复制代码
CREATE TABLE USER(
 id INT PRIMARY KEY AUTO_INCREMENT,
 username VARCHAR(32),
 PASSWORD VARCHAR(32)
);


-- 添加数据
INSERT INTO USER VALUES(NULL,'zhangsan','123');
INSERT INTO USER VALUES(NULL,'lisi','234');

SELECT * FROM USER;
复制代码

  2、实现登录功能代码

复制代码
/**
 * 需求:
 *   1.通过键盘录入用户名和密码
 *   2.判断用户是否登录成功
 */
public class JDBCDemo9 {
    public static void main(String[] args) {
        //调用方法
        boolean login = login("zhangsan", "123");
        if (login){
            System.out.println("登陆成功");
        }else {
            System.out.println("用户名或密码错误");
        }
    }
    /**
     * 登陆方法
     */
    public static boolean login(String user,String password){
        if (user == null || password==null){
            return false;
        }
        //连接数据库判断是否登陆成功

        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            //1.获取连接
            conn = JDBCUtils.getConnection();
            //2.定义sql
            String sql = "select * from user where username = '"+user+"'and password = '"+password+"'";
            //3.获取执行的sql对象
            stmt = conn.createStatement();
            //4.执行SQL
            rs = stmt.executeQuery(sql);
            //5.判读
            return rs.next();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            JDBCUtils.close(rs,stmt,conn);
        }
        return false;
    }
}
复制代码

 

 

 

 

 

 

 

 

 

JDBC事务管理

PreparedStatement:执行sql的对象

1、sql注入问题,在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题

2、解决sql注入问题,使用PreparedStatement对象来解决

3、预编译的sql:参数使用?作为占位符

4、步骤:

  ​1.导入驱动jar包:mysql-connector-java-5.1.37-bin.jar

  2、注册驱动

  3、获取数据库连接对象 Connection

  4、定义sql

    注意:sql的参数使用?作为占位符。如:

      select * from user where username = ? and password = ?;

  5、获取执行sql语句的对象 PreparedStatement,Connection.prepareStatement(String sql);

  6、给?赋值:

    方法:setXxx(参数1,参数2) 

      参数1:? 的位置编号,从1开始

      参数2:?的值

  6、执行sql,接受返回结果

  7、处理结果

  8、释放资源

5、注意:后期都会使用PreparedStatement来完成增删改查的所有操作

  1、可以防止SQL注入

  2、效率更高

复制代码
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入用户名:");
        String user = sc.next();
        System.out.println("输入密码:");
        String password = sc.next();
        //调用方法
        boolean login = login2(user,password);
        if (login){
            System.out.println("登陆成功");
        }else {
            System.out.println("用户名或密码错误");
        }
    }
/**
     * 登陆方法 使用PrepareStatement实现
     */
    public static boolean login2(String user,String password){
        if (user == null || password==null){
            return false;
        }
        //连接数据库判断是否登陆成功

        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            //1.获取连接
            conn = JDBCUtils.getConnection();
            //2.定义sql
            String sql = "select * from user where username = ? and password = ? ";
            //3.获取执行的sql对象
            pstmt = conn.prepareStatement(sql);
            //给?赋值
            pstmt.setString(1,user);
            pstmt.setString(2,password);
            //4.执行SQL
            rs = pstmt.executeQuery();
            //5.判读
            return rs.next();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            JDBCUtils.close(rs,pstmt,conn);
        }
        return false;
    }
复制代码

运行结果:

 

 

 

 

 

 

posted @   xjw12345  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示