JDBC事务管理:
1. Preparedstatement:执行sql的对象
1. sQL注入问题∶在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题
1.输入用户随便,输入密码:a' or 'a' = 'a
2. sql : select * from user where username = 'fhdsjkf' and password = 'a' or 'a' = 'a'
3.预编译的sQL:参数使用?作为占位符
4.步骤∶
1.导人驱动jar包mysql-connector-java-5.1.37-bin.jar
2.注册驱动
3.获取数据库连接对象connection
4.定义sql
注意:sql的参数使用?作为占位符。如; select *from user where username a ? and password = ?;
5.获取执行sql语句的对象 PreparedStatement Connection.prepareStatement(string sql)
6.给?赋值:
方法:setxxx(参数1,参数2)
参数1:?的位置编号从1开始
参数2∶?的值
7.执行sql,接受返回结果,不需要传递sql语句
8.处理结果
9.释放资源
代码实现:
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 login = JDBCDemo9.login1(username, password); // 3.判断结果,输出不同语句 if (login) { // 登录成功 System.out.println("登录成功"); } else { System.out.println("用户名或密码错误!"); } } /** * 登录方法,使用PreparedStatement实现 */ public static boolean login1(String username, String password) { if (username == null || password == null) { return false; } //连接数据库判断是否登录成功 Connection conn = null; PreparedStatement pst = null; ResultSet rs = null; // 1.获取连接 try { conn = JDBCUtils.getConnection(); // 2.定义sql String sql = "select * from user where username = ? and password = ?"; // 3.获取执行sql的对象 pst = conn.prepareStatement(sql); // 给?赋值 pst.setString(1,username); pst.setString(2,password); // 4.执行查询 rs = pst.executeQuery(); // 5.判断 return rs.next();//如果有下一行,则返回true } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtils.close(pst,conn,rs); } return false; }
输出结果:
JDBC管理事物_概述:
JDBC控制事务∶
1.事务:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。
2.操作:
1.开后事务
2.提交事务
3.回滚事务
3.使用connection对象来管理事务
开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务
提交事务: commit()
回滚事务:rollback()
*替数2∶?的值
标签:username,事务管理,JDBC,String,概述,sql,password,pst From: https://www.cnblogs.com/hungui/p/16814034.html