554JDBC事务管理 Jdbc事务管理 and555JDBC管理事务_概述 556JDBC管理事务实现

JDBC事务管理

1.Preparedstatement:执行sql的对象
  1.SQL注入问题:在拼接sql时,有一些的sql的特殊关键字参与字符串的拼接。会造成安全性问题

  2.用户随便输入:例如dawugfak,密码输入a' or = 'a' 'a

  3.sql:select* from user where username = 'fhdsjkf' and password='a' or 'a'='a

2.解决sql注入问题:使用preparedStatement对象来解决

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

步骤:  
    导入驱动jar包mysql-connector-java-5.1.37-bin.jar

    注册驱动

    获取数据库连接对象connection

    定义sql

      注意;sql的参数使用?作为占位符。如; select*from user where username = ? and password = ?;获取执行sql语句的对象 Preparedstatement Connection.prepareStatement(string sql)

    给?赋值︰

      *方法:setxxx(参数1,参数2)

        *参数1:?的位置编号从1开始*参数2:?的值

    执行sq1,接受返回结果,不需要传递sql语句

    处理结果

    释放资源

public class JDBC_demo003lx {
    public static void main(String[] args) throws SQLException {
        //1.键盘录入,接受用户和密码
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username = sc.nextLine();
        System.out.println("请输入密码:");
        String password = sc.nextLine();

        //2.调用方法,非静态方法new一个对象
        boolean flag = new JDBC_demo003lx().login(username, password);

        //3.判断结果,输出不同语句
        if (flag) {
            System.out.println("登录成功");
        } else {
            System.out.println("登录失败");
        }
    }

    /*写一个登陆方法,有参数用户和密码,返回是否登陆成功*/
    public boolean login(String username, String password) throws SQLException {
        //判断录入的密码和用户名是否为空
        if (username == null || password == null) {
            return false;
        }
        //连接数据库判断是否登陆成功
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;

        //1.获取链接

        try {
            conn = JDBCUtils.getConnection();
            //2.定义sql语句
            String sql = "select * from user where username= ? and password = ?";
            //3.获取执行sql的对象
            stmt = conn.prepareStatement(sql);
            //给?赋值
            stmt.setString(1, username);
            stmt.setString(2, password);
            //4.执行查询
            rs = stmt.executeQuery();
            //5.判断结果集是不是有数据
            return rs.next(); //返回为布尔型数据,如果有下一行就返回true
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //6.释放资源
            JDBCUtils.close(rs, stmt, conn);
        }
        return false;
    }
}

 

 

 JDBC管理事务_概述

  事务:一个包含多个步骤的业务操作,如果这个业务操作被事务管理,则多个步骤同时成功要么同时失败

    操作

      开启事务

      提交事务

      回滚事务

    使用Connection对象来管理事务对象

      开启事务:setAutoCommit(boolaen autoCommit) 使用该方法设置参数false,级开启事务

      提交事务:commit

      回滚事务:rollback

 

    public static void main(String[] args) {
        /* 声明到try外面 */
        Connection conn = null;
        PreparedStatement pstmt1 = null;
        PreparedStatement pstmt2 = null;

        try {
            /* 获取连接 */
            conn = JDBCUtils.getConnection();
            /* 开启事务 */
            conn.setAutoCommit(false);

            /* 定义sql */  /* 2.1 汤姆-500  2.2 杰瑞+500 */
            String slq1 = "update account set balance = balance - ? where id = ?"; //  2.1
            String slq2 = "update account set balance = balance + ? where id = ?"; //  2.2
            /* 获取sql执行对象 */
            pstmt1 = conn.prepareStatement(slq1);
            pstmt2 = conn.prepareStatement(slq2);
            /* 设置参数 */
            pstmt1.setDouble(1,500);//汤姆-500
            pstmt1.setDouble(2,1);//id为1

            pstmt2.setDouble(1,500);//杰瑞+500
            pstmt2.setDouble(2,2);//id为2
            /* 执行sql */
            pstmt1.executeUpdate();
            /*手动制造异常*/
            int i=3/0;
            pstmt2.executeUpdate();
            /* 提交事务 */
            conn.commit();
        } catch (SQLException e) {
            /* 事务的回滚 */
            try {
                if (conn != null) {
                    conn.rollback();
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            e.printStackTrace();
        } finally {
            /* 关流 */
            JDBCUtils.close(pstmt1,conn);
            JDBCUtils.close(pstmt2,null);
        }
    }
}

 

posted @ 2022-10-18 08:59  ja不会va  阅读(58)  评论(0)    收藏  举报