1.课程介绍
1.PreparedStatement介绍;(了解)
2.PreparedStatement使用;(掌握) 动态语句对象执行sql语句是动态的
3.登录功能
4.登录功能的实现方式
5.事务介绍;(了解)
6.事务开启/提交/回滚;(掌握)
7.事务使用;(掌握) 银行转账业务
8.拿到主键;(了解)(只针对于自增的)
9.连接池;(了解) 在框架中配置连接参数即可集成(导包)
10.优化工具类(了解)
2. PreparedStatement查询
2.1 回顾jdbc
通过jdbc完成一个增删改查
①建一个表student
字段 username,password,age,id,intro,sex
根据表创建一个域对象,domain对象
②写一个dao层,在里面写一个接口
IStudentDAO
③写一个dao层接口的实现类
④抽取代码JDBCUtil–工具类
完善查询所有:
2.2 PreparedStatement的引入
在使用JDBC的时候,定义sql的时候,里面有个很纠结的问题,拼接字符串不好拼接
,特别是插入和修改更不好拼接;
怎么才能不拼接字符串 – 通过PreparedStatement
2.2.1 PreparedStatement介绍
Statement: 表示静态SQL语句对象.
PreparedStatement:Statement的子接口,==表示预编译SQL语句对象. ==
什么是预编译SQL语句
预编译语句PreparedStatement 是java.sql中的一个接口,它是Statement的子接口。通过Statement对象执行SQL语句时,需要将SQL语句发送给DBMS,由 DBMS首先进行编译后再执行。预编译语句和Statement不同,在创建PreparedStatement 对象时就指定了SQL语句,该语句立即发送给DBMS进行编译。当该编译语句被执行时,DBMS直接运行编译后的SQL语句,而不需要像其他SQL语句那样首先将其编译,在执行。
Api示例:
注意: ?上面不要添加引号, 不要这样写 ‘?’;
后面会自动知道该?表示的是什么类型;
比如:pstm.setInt(2,110592) 这里可以设置int值,它会自动知道;
2.3 PreparedStatement使用
贾琏欲执事:
但是其中的欲 — 获取欲处理对象
注意的地方:
mysql有个叫SQL_SAFE_UPDATES的变量,为了数据库更新操作的安全性
直接执行:SET SQL_SAFE_UPDATES=0;
①贾琏步骤都是一样,而PreparedStatement是Statement的子接口
②问号(?)–相当于占位符(SQL里面的问题),我们使用的时候有没有区分类型?–没有-字符串也不需要特殊加上引号
③在拿到语句对象的时候就使用SQL
Statement st = conn.createStatement(); PreparedStatement st = conn.prepareStatement(sql);//预编译sql
④在执行的时候不需要传sql;
⑤所有占位符,需要给它添加相应的值–
PreparedStatement对象.setXxxx(位置(从1开始),相应的值)
⑥? 只能放在特定的地方(不能替换关键字表名)–不能放在 select * from ?
PreparedStatement容易出错的地方:
1.占位符字符串千万不要加上引号;
2.加上相应的值的时候,位置,类型,个数必须要完全一致;
3.执行的时候,不要SQL放进来;
st.executeUpdate()执行的是编译之后的语句,如果你把sql放进去,是编译前的sql,里面就会出现问题;
总结: Statement 和 PreparedStatement的区别 Statement在创建语句对象,不需要传入sql; ==statement = connection.createStatement();== PreparedStatement在创建预编译语句对象,在创建的时候,需要传入sql; ==ps = connection.prepareStatement(sql);== 在执行sql语句的时候,Statement 需要传入sql;PreparedStatement在执行sql语句时候,不需要传入sql;
2.4 完善功能
刚才是通过st.setString/st.setInt/setBoolean 等方式设置值,还要一个方法
st.setObject(index,value)来设置;
如下图:
完成插入功能:
完善删除功能
完成查询功能
使用Statement和使用PrepareStatement那种方式更好?
以后都使用PrepareStatement;
2.5 为什么选择PreparedStatement
以后都用PreparedStatement,它有以下这些好处;
2.5.1思路清楚,使用方便
不需要我们去拼接字符串
特别是字段很多的时候,如果用Statement拼字符串。谁用谁知道;
2.5.2 速度,效率更高,更快
PreparedStatemnt的速度比Statement更快
PrepareStatement是预处理语句
我把一条sql发送到数据库之后,数据库会做什么事情?
通过两块完成:Java程序和数据库部分
Java程序会发送sql到数据库:
Statement发送sql
到缓存区查看sql’是否存在,如果存在,直接使用缓存区的sql执行,如果不存在,从①到⑤,这些步骤是很费时间和性能;
①检查sql的安全性;
②解析sql;
③将sql编译成二进制;
④执行sql;
⑤(有的数据库会把这条sql放到缓存中,也就是在数据库里面开辟一块缓存空间)
PreparedStatement 发生sql
Mysql不支持缓存
javaweb实训第四天下午——JDBC深入理解(2)https://developer.aliyun.com/article/1414847?spm=a2c6h.13148508.setting.42.6e1a4f0eQzpjQW