2022-08-19 第二组刘禹彤 学习笔记
打卡36天
###学习内容
JDBC(续)
Statement的不足:
1、大量的字符串拼接,代码可读性降低。
2、sql注入
SQL注入:BUG 通过字符串的拼接,可以得到一个恒等的sql语句,可以跳过某些判断。
PreparedStatement
预编译(预加载)
1.通过conn获取的对象
2.通过Statement接口的子接口
3.sql语句中可以传参-----用?占位,通过setxxx方法来给?赋值
4.提高性能
5.避免sql注入
数据库事务
数据库特性
Mysql的数据库引擎
1.在MySQL中,只有使用了Innodb引擎的数据库才支持事务
2.事务处理可以用来维护数组的完整性,保证sql语句要么全部执行,要么全部不执行
3.发生在DML中,增删改
事务的四大特征ACID
- 原子性A
一个事务,要么全部完成,要么全部不完成
- 一致性C
在事务开始之前和事务结束之后,数据库的完整性没有被破坏
- 隔离性Isolation
数据库允许多个事务同时对数据进行处理,每个事务之间相互隔离
- 持久性D
事务结束之后,对数据的增删改是永久性的
术语
提交事务,回滚事务(事务回滚)
1.事务一旦提交,就不可能回滚
2.当一个连接对象创建时,默认情况下自动提交事务
3.关闭连接时,数据会自动提交事务
操作事务的步骤
1.关闭事务的自动提交
true:开启(默认) false:关闭
2.当做出增删改操作,把变化发生在内存中,提交事务才会真正交给数据库
###学习心得
今天继续学习JDBC,其中有PreparedStatement和数据库事务,知识点理解的还可以
###掌握情况:一般
###课上练习
package a; import a.Util.JDBCUtil; import org.junit.Test; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; public class Ch01 { @Test public void test01() { Connection conn = null; PreparedStatement pstmt = null; try { conn = JDBCUtil.connection(); String sql = "update teacher set name = ? where id = ?"; // 预编译 pstmt = conn.prepareStatement(sql); // 给占位符赋值,根据位置 pstmt.setString(1,"JJ"); pstmt.setInt(2,6); // 正式执行sql int i = pstmt.executeUpdate(); System.out.println(i); } catch (SQLException e) { throw new RuntimeException(e); } finally { JDBCUtil.close(conn,pstmt); } } }
###运行结果