javaweb实训第四天下午——JDBC深入理解(1)

简介: 1.课程介绍1.PreparedStatement介绍;(了解)2.PreparedStatement使用;(掌握) 动态语句对象执行sql语句是动态的3.登录功能4.登录功能的实现方式

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层接口的实现类

20210602095815371.png

④抽取代码JDBCUtil–工具类

20210602095821500.png

完善查询所有:

20210602095825713.png

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示例:

20210602095937847.png

注意: ?上面不要添加引号, 不要这样写 ‘?’;
后面会自动知道该?表示的是什么类型;

  比如:pstm.setInt(2,110592) 这里可以设置int值,它会自动知道;

2.3 PreparedStatement使用

贾琏欲执事:

但是其中的欲 — 获取欲处理对象

20210602100006104.png

注意的地方:

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)来设置;

如下图:

20210602100320748.png

完成插入功能:

20210602100329176.png

完善删除功能

20210602100332796.png

20210602100339953.png

完成查询功能

20210602100344486.png

使用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

20210602100537613.png

Mysql不支持缓存

javaweb实训第四天下午——JDBC深入理解(2)https://developer.aliyun.com/article/1414847?spm=a2c6h.13148508.setting.42.6e1a4f0eQzpjQW

目录
相关文章
|
4天前
|
SQL Java 数据库连接
java使用jdbc操作数据库
java使用jdbc操作数据库
|
4天前
|
SQL Java 数据库连接
Java一分钟之-JDBC:Java数据库连接基础
【5月更文挑战第14天】JDBC是Java与关系数据库交互的API,常见问题包括资源管理、SQL注入和性能优化。易错点涉及驱动加载、空指针异常和事务管理。避免这些问题的方法有使用try-with-resources自动关闭资源、预编译PreparedStatement以防止SQL注入,以及正确管理事务。示例代码展示了基本的JDBC连接和查询。在实际开发中,推荐使用ORM框架如Hibernate或JPA来简化数据库操作。
14 1
|
4天前
|
SQL Java 关系型数据库
零基础轻松入门Java数据库连接(JDBC)
零基础轻松入门Java数据库连接(JDBC)
13 0
|
4天前
|
SQL Java 数据库连接
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
12 0
|
4天前
|
Java 关系型数据库 MySQL
【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术
【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术
|
4天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
ava从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
|
4天前
|
SQL Java 数据库连接
使用JDBC进行数据库操作:Java Web开发的数据库连接
【4月更文挑战第3天】Java Web开发中,JDBC是与数据库交互的关键,提供统一访问关系型数据库的规范。核心组件包括DriverManager、Connection、Statement和ResultSet。使用流程涉及加载驱动、建立连接、创建Statement、执行SQL及处理结果,最后关闭资源。最佳实践包括使用try-with-resources、PreparedStatement、事务管理等。在Web开发中,JDBC用于用户认证、数据持久化、检索和事务管理。虽然有ORM工具,但掌握JDBC基础仍然重要。
|
4天前
|
SQL Java 数据库连接
Java的JDBC编程
Java的JDBC编程
|
4天前
|
SQL Java 关系型数据库
Java学习—JDBC
Java学习—JDBC
|
4天前
|
druid Java 数据库连接
最新Java基础系列课程--Day16-JDBC编程(三)
最新Java基础系列课程--Day16-JDBC编程