大家好,我是 Java最全面试题库
的 提裤姐
,今天这篇是JavaWeb系列的第一篇,主要总结了Java中的JDBC相关的问题,在后续,会沿着第一篇开篇的知识线路一直总结下去,做到日更!如果我能做到百日百更,希望你也可以跟着百日百刷,一百天养成一个好习惯。
JDBC的全称是 Java DataBase Connection
,也就是 Java数据库连接
,我们可以用它来操作关系型数据库。
JDBC接口及相关类在java.sql包和javax.sql包里。
我们可以用它来连接数据库,执行SQL查询,存储过程,并处理返回的结果。
1. Class.forName()
加载数据库连接驱动;
2. DriverManager.getConnection()
获取数据连接对象;
3.根据 SQL 获取 sql 会话对象,有 2 种方式 Statement、PreparedStatement ;
4.执行 SQL 处理结果集,执行 SQL 前如果有参数值就设置参数值 setXXX();
5.关闭结果集、关闭会话、关闭连接。
速度要快于 Statement 对象。
在 JDBC 应用中,在任何时候都不要使用 Statement,原因如下:
①代码的可读性和可维护性.Statement 需要不断地拼接,而 PreparedStatement 不会。
②PreparedStatement 尽最大可能提高性能.DB 有缓存机制,相同的预编译语句再次被调用不会再次需要
编译。
③最重要的一点是极大地提高了安全性.Statement 容易被 SQL 注入,而 PreparedStatementc 传入的内容不会和 sql 语句发生任何匹配关系。
前提:为数据库连接建立一个缓冲池。
1:从连接池获取或创建可用连接
2:使用完毕之后,把连接返回给连接池
3:在系统关闭前,断开所有连接并释放连接占用的系统资源
4:能够处理无效连接,限制连接池中的连接总数不低于或者不超过某个限定值。
通过制定接口,数据库厂商来实现。我们只要通过接口调用即可。
驱动只有在通过的Class.forName反射机制来加载的时候才会出现。
一共有三种 ResultSet
对象。
ResultSet.TYPE_FORWARD_ONLY ResultSet.TYPE_SCROLL_INSENSITIVE ResultSet.TYPE_SCROLL_SENSITIVE
ResultSet中有两种并发类型。
ResultSet.CONCUR_READ_ONLY ResultSet.CONCUR_UPDATABLE
java.sql.SQLException java.sql.BatchUpdateException java.sql.SQLWarning java.sql.DataTruncation
DataSource即数据源,它是定义在javax.sql中的一个接口,跟DriverManager相比,它的功能要更强大。我们可以用它来创建数据库连接,当然驱动的实现类会实际去完成这个工作。除了能创建连接外,它还提供了如下的特性:
通常我们不使用execute,如果你不知道要执行的SQL语句是什么类型的,就可以使用execute。
数据库连接是一种关键的有限的昂贵的资源,对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。
JDBC的DriverManager是一个工厂类,我们通过它来创建数据库连接。当JDBC的Driver类被加载进来时,它会自己注册到DriverManager类里面,然后我们会把数据库配置信息传成 DriverManager.getConnection()
方法,DriverManager会使用注册到它里面的驱动来获取数据库连接,并返回给调用的程序。
RowSet继承自ResultSet,因此它有ResultSet的全部功能,同时它自己添加了些额外的特性。
RowSet一个最大的好处是它可以是离线的,这样使得它更轻量级,同时便于在网络间进行传输。