美文网首页Mysql
JDBC 2.PreparedStatement与事务

JDBC 2.PreparedStatement与事务

作者: 第二套广播体操 | 来源:发表于2019-03-28 14:56 被阅读0次

PreparedStatement 执行sql的对象
sql注入问题 在拼接sql时 有一些sql的特殊关键字参与字符串的拼接会导致安全问题
解决方法 使用PreparedStatement

预编译 sql 参数使用?作为占位符
定义sql的参数使用作为占位符

方法:setXXX(问号的位置编号从1开始,占位符所在位置的值);
如果是字符串就是 setString 整数就是 setInt
执行时不需要传递sql语句

演示 登录功能

/** 登录功能 */
public class Jdbc_PreparedStatement {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1", "root", "root");
            String sql = "select *from work where user=? and password=?";
            ps = conn.prepareStatement(sql);
            ps.setString(1,"张三");
            ps.setString(2,"23456");
            resultSet = ps.executeQuery();
            if (resultSet.next() == true) {
                System.out.println("登陆成功");
            } else {
                System.out.println("登陆失败");
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JdbcUnits.getClose(conn,ps,resultSet);
        }
    }
}

Jdbc 事务控制
事务 一个包含多个步骤的业务操作 如果这个业务操作被事务管理
则这多个步骤要么同时成功 要么同时失效

通过connection进行事务管理

开启方法 setAutoCommit(false)
提交方法commit()
回滚方法 rollback()

/**
 * 事务 及事务回滚和提交
 */
public class Jdbc_AutoCommit {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement pstat1 = null;
        PreparedStatement pstat2 = null;
        try {
            connection = JdbcUnits.getConnection();
//            创建事务 开启手动提交
            connection.setAutoCommit(false);
            pstat1 = connection.prepareStatement(
                      "UPDATE change_money SET money=money-? WHERE id=?");
            pstat2 = connection.prepareStatement(
                      "UPDATE change_money SET money=money+? WHERE id=?");
            pstat1.setInt(1,500);
            pstat1.setInt(2,1);

            pstat2.setInt(1,500);
            pstat2.setInt(2,2);
            pstat1.executeUpdate();
//           在两次提交中出现错误导致第二次无法提交 可以回滚到之前状态
//            int i=  2/0;
            pstat2.executeUpdate();
//          提交事务
            connection.commit();
        } catch (Exception e) {
//            出现错误 回滚
            try {
                connection.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }finally {
            JdbcUnits.getClose(connection,pstat1);
            JdbcUnits.getClose(null,pstat2);
        }
    }
}

相关文章

  • JDBC 2.PreparedStatement与事务

    PreparedStatement 执行sql的对象sql注入问题 在拼接sql时 有一些sql的特殊关键字参与字...

  • JTA事务

    JDBC和JTA事务区别简单的说 jta是多库的事务 jdbc是单库的事务。 jdbc事务JDBC事务由Connn...

  • java事务

    1、java事务介绍 2、JDBC事务 3、JTA事务 1、java事务介绍 java事务分类:JDBC事务、...

  • JDBC

    JDBC JDBC控制事务:

  • JDBC

    JDBC原理: JDBC: 抽取JDBC工具类 : JDBCUtils JDBC控制事务:

  • Day05--JDBC

    JDBC: 抽取JDBC工具类:JDBCUtils JDBC控制事务

  • JDBC

    JDBC: 抽取JDBC工具类 : JDBCUtils JDBC控制事务:

  • 04 JDBC

    今日内容 JDBC: 抽取JDBC工具类 : JDBCUtils JDBC控制事务:

  • 5.JDBC

    主要内容 JDBC: 抽取JDBC工具类 : JDBCUtils JDBC控制事务:

  • JDBC 控制事务

    JDBC 控制事务

网友评论

    本文标题:JDBC 2.PreparedStatement与事务

    本文链接:https://www.haomeiwen.com/subject/xwpqbqtx.html