【019】JavaWeb面试题(一):JDBC

开篇介绍

你们好,我是Java最全面试题库提裤姐,今天这篇是JavaWeb系列的第一篇,主要总结了Java中的JDBC相关的问题,在后续,会沿着第一篇开篇的知识线路一直总结下去,作到日更!若是我能作到百日百更,但愿你也能够跟着百日百刷,一百天养成一个好习惯。java

什么是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.关闭结果集、关闭会话、关闭链接。sql

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一个最大的好处是它能够是离线的,这样使得它更轻量级,同时便于在网络间进行传输。

相关文章
相关标签/搜索