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) throws SQLException { Connection conn = JDBCUtils.getConnection(); String sql1 = "update account set balance = balance - ? where id = ?"; String sql2 = "update account set balance = balance + ? where id = ?"; PreparedStatement pstmt1 = conn.prepareStatement(sql1); PreparedStatement pstmt2 = conn.prepareStatement(sql2); pstmt1.setDouble(1,500); pstmt1.setInt(2,3); pstmt2.setDouble(1,500); pstmt2.setInt(2,4); pstmt1.executeUpdate(); pstmt2.executeUpdate(); JDBCUtils.close(pstmt1,conn); JDBCUtils.close(pstmt2,null); } }
标签:username,事务管理,事务,Jdbc,String,sql,password,conn From: https://www.cnblogs.com/agzq/p/16801432.html