共计 3013 个字符,预计需要花费 8 分钟才能阅读完成。
开篇介绍
大家好,我是 Java 最全面试题库
的提裤姐
,明天这篇是 JavaWeb 系列的第一篇,次要总结了 Java 中的 JDBC 相干的问题,在后续,会沿着第一篇开篇的常识线路始终总结上来,做到日更!如果我能做到百日百更,心愿你也能够跟着百日百刷,一百天养成一个好习惯。
什么是 JDBC?
JDBC 的全称是 Java DataBase Connection
,也就是Java 数据库连贯
,咱们能够用它来操作关系型数据库。
JDBC 接口及相干类在 java.sql 包和 javax.sql 包里。
咱们能够用它来连贯数据库,执行 SQL 查问,存储过程,并解决返回的后果。
原生 JDBC 操作数据库流程?
1.Class.forName()
加载数据库连贯驱动;
2.DriverManager.getConnection()
获取数据连贯对象;
3. 依据 SQL 获取 sql 会话对象,有 2 种形式 Statement、PreparedStatement ;
4. 执行 SQL 处理结果集,执行 SQL 前如果有参数值就设置参数值 setXXX();
5. 敞开后果集、敞开会话、敞开连贯。
JDBC 中的 Statement 和 PreparedStatement 的区别?
- PreparedStatement 继承于 Statement,PreparedStatement 实例蕴含已编译的 SQL 语句,所以其执行
速度要快于 Statement 对象。
- 作为 Statement 的子类,PreparedStatement 继承了 Statement 的所有性能。三 种 办法 execute、executeQuery 和 executeUpdate 已被更改以使之不再须要参数
- Statement 个别用于执行固定的没有参数的 SQL
- PreparedStatement 个别用于执行有?参数预编译的 SQL 语句。
- PreparedStatement 反对? 操作参数,绝对于 Statement 更加灵便。
- PreparedStatement 能够避免 SQL 注入,安全性高于 Statement。
在 JDBC 利用中, 在任何时候都不要应用 Statement,起因如下:
①代码的可读性和可维护性.Statement 须要一直地拼接,而 PreparedStatement 不会。
②PreparedStatement 尽最大可能进步性能.DB 有缓存机制,雷同的预编译语句再次被调用不会再次须要
编译。
③最重要的一点是极大地提高了安全性.Statement 容易被 SQL 注入,而 PreparedStatementc 传入的内容不会和 sql 语句产生任何匹配关系。
关系数据库中连接池的机制是什么?
前提:为数据库连贯建设一个缓冲池。
1:从连接池获取或创立可用连贯
2:应用结束之后,把连贯返回给连接池
3:在零碎敞开前,断开所有连贯并开释连贯占用的系统资源
4:可能解决有效连贯,限度连接池中的连贯总数不低于或者不超过某个限定值。
JDBC 是如何实现的 Java 程序和 JDBC 驱动的松耦合的?
通过制订接口,数据库厂商来实现。咱们只有通过接口调用即可。
驱动只有在通过的 Class.forName 反射机制来加载的时候才会呈现。
有哪些不同的后果集?
一共有三种 ResultSet
对象。
ResultSet.TYPE_FORWARD_ONLY
:这是默认的类型,它的游标只能往下移。ResultSet.TYPE_SCROLL_INSENSITIVE
:游标能够高低挪动,一旦它创立后,数据库里的数据再产生批改,对它来说是通明的。ResultSet.TYPE_SCROLL_SENSITIVE
:游标能够高低挪动,如果生成后数据库还产生了批改操作,它是可能感知到的。
ResultSet 中有两种并发类型。
ResultSet.CONCUR_READ_ONLY
:ResultSet 是只读的,这是默认类型。ResultSet.CONCUR_UPDATABLE
:咱们能够应用的 ResultSet 的更新办法来更新外面的数据。
常见的 JDBC 异样有哪些?
java.sql.SQLException
:JDBC 异样的基类。java.sql.BatchUpdateException
:当批处理操作执行失败的时候可能会抛出这个异样。这取决于具体的 JDBC 驱动的实现,它也可能间接抛出基类异样 java.sql.SQLException 中。java.sql.SQLWarning
:SQL 操作呈现的正告信息。java.sql.DataTruncation
:字段值因为某些非正常起因被截断了
JDBC 的 DataSource 是什么,有什么益处?
DataSource 即数据源,它是定义在 javax.sql 中的一个接口,跟 DriverManager 相比,它的性能要更弱小。咱们能够用它来创立数据库连贯,当然驱动的实现类会理论去实现这个工作。除了能创立连贯外,它还提供了如下的个性:
- 缓存 PreparedStatement 以便更快的执行
- 能够设置连贯超时工夫
- 提供日志记录的性能
- ResultSet 大小的最大阈值设置
- 通过 JNDI 的反对,能够为 servlet 容器提供连接池的性能
execute,executeQuery,executeUpdate 的区别是什么?
- execute 能够用来执行任意 SQL 语句,返回一个 boolean 的值,表明该语句是否返回了一个后果集对象 ResultSet。
- executeUpdate 用来执行批改,插入,删除操作,执行 SELECT 会抛出异样
- executeQuery 只能进行 SELECT,从而失去后果集对象,DELETE、UPDATE、INSERT 操作都会抛出异样
通常咱们不应用 execute,如果你不晓得要执行的 SQL 语句是什么类型的,就能够应用 execute。
数据库连接池的原理。为什么要应用连接池?
数据库连贯是一种要害的无限的低廉的资源,对数据库连贯的治理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。
数据库连接池负责调配、治理和开释数据库连贯,它容许应用程序重复使用一个现有的数据库连贯,而不是从新建设一个;开释闲暇工夫超过最大闲暇工夫的数据库连贯来防止因为没有开释数据库连贯而引起的数据库连贯脱漏。这项技术能明显提高对数据库操作的性能。
数据库连接池在初始化时将创立肯定数量的数据库连贯放到连接池中,这些数据库连贯的数量是由最小数据库连接数来设定的。无论这些数据库连贯是否被应用,连接池都将始终保障至多领有这么多的连贯数量。连接池的最大数据库连贯数量限定了这个连接池能占有的最大连接数,当应用程序向连接池申请的连接数超过最大连贯数量时,这些申请将被退出到期待队列中。
JDBC 的 DriverManager 是用来做什么的?
JDBC 的 DriverManager 是一个工厂类,咱们通过它来创立数据库连贯。当 JDBC 的 Driver 类被加载进来时,它会本人注册到 DriverManager 类外面,而后咱们会把数据库配置信息传成 DriverManager.getConnection()
办法,DriverManager 会应用注册到它外面的驱动来获取数据库连贯,并返回给调用的程序。
RowSet 和 ResultSet 的区别?
RowSet 继承自 ResultSet,因而它有 ResultSet 的全副性能,同时它本人增加了些额定的个性。
RowSet 一个最大的益处是它能够是离线的,这样使得它更轻量级,同时便于在网络间进行传输。