你们好,我是Java最全面试题库
的提裤姐
,今天这篇是JavaWeb系列的第一篇,主要总结了Java中的JDBC相关的问题,在后续,会沿着第一篇开篇的知识线路一直总结下去,作到日更!若是我能作到百日百更,但愿你也能够跟着百日百刷,一百天养成一个好习惯。java
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.关闭结果集、关闭会话、关闭链接。sql
速度要快于 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是只读的,这是默认类型。ResultSet.CONCUR_UPDATABLE
:咱们可使用的ResultSet的更新方法来更新里面的数据。java.sql.SQLException
:JDBC异常的基类。java.sql.BatchUpdateException
:当批处理操做执行失败的时候可能会抛出这个异常。这取决于具体的JDBC驱动的实现,它也可能直接抛出基类异常java.sql.SQLException中。java.sql.SQLWarning
:SQL操做出现的警告信息。java.sql.DataTruncation
:字段值因为某些非正常缘由被截断了DataSource即数据源,它是定义在javax.sql中的一个接口,跟DriverManager相比,它的功能要更强大。咱们能够用它来建立数据库链接,固然驱动的实现类会实际去完成这个工做。除了能建立链接外,它还提供了以下的特性:大数据
一般咱们不使用execute,若是你不知道要执行的SQL语句是什么类型的,就可使用execute。
数据库链接是一种关键的有限的昂贵的资源,对数据库链接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库链接池正是针对这个问题提出来的。
数据库链接池负责分配、管理和释放数据库链接,它容许应用程序重复使用一个现有的数据库链接,而不是从新创建一个;释放空闲时间超过最大空闲时间的数据库链接来避免由于没有释放数据库链接而引发的数据库链接遗漏。这项技术能明显提升对数据库操做的性能。
数据库链接池在初始化时将建立必定数量的数据库链接放到链接池中,这些数据库链接的数量是由最小数据库链接数来设定的。不管这些数据库链接是否被使用,链接池都将一直保证至少拥有这么多的链接数量。链接池的最大数据库链接数量限定了这个链接池能占有的最大链接数,当应用程序向链接池请求的链接数超过最大链接数量时,这些请求将被加入到等待队列中。
JDBC的DriverManager是一个工厂类,咱们经过它来建立数据库链接。当JDBC的Driver类被加载进来时,它会本身注册到DriverManager类里面,而后咱们会把数据库配置信息传成DriverManager.getConnection()
方法,DriverManager会使用注册到它里面的驱动来获取数据库链接,并返回给调用的程序。
RowSet继承自ResultSet,所以它有ResultSet的所有功能,同时它本身添加了些额外的特性。RowSet一个最大的好处是它能够是离线的,这样使得它更轻量级,同时便于在网络间进行传输。