JDBC面试题都在这里(五)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 以下我是归纳的JDBC知识点

常见的JDBC异常有哪些?


常见的JDBC异常有哪些?

有以下这些:

  • java.sql.SQLException——这是JDBC异常的基类。
  • java.sql.BatchUpdateException——当批处理操作执行失败的时候可能会抛出这个异常。这取决于具体的JDBC驱动的实现,它也可能直接抛出基类异常java.sql.SQLException。
  • java.sql.SQLWarning——SQL操作出现的警告信息。
  • java.sql.DataTruncation——字段值由于某些非正常原因被截断了(不是因为超过对应字段类型的长度限制)。


JDBC中存在哪些不同类型的锁?


JDBC中存在哪些不同类型的锁?

从广义上讲,有两种锁机制来防止多个用户同时操作引起的数据损坏。

  • 乐观锁——只有当更新数据的时候才会锁定记录
  • 悲观锁——从查询到更新和提交整个过程都会对数据记录进行加锁。


java.util.Date和java.sql.Date有什么区别?


java.util.Date和java.sql.Date有什么区别?

java.util.Date包含日期和时间,而java.sql.Date只包含日期信息,而没有具体的时间信息。如果你想把时间信息存储在数据库里,可以考虑使用Timestamp或者DateTime字段


SQLWarning是什么,在程序中如何获取SQLWarning?


SQLWarning是什么,在程序中如何获取SQLWarning?

SQLWarning是SQLException的子类,通过Connection, Statement, Result的getWarnings方法都可以获取到它。 SQLWarning不会中断查询语句的执行,只是用来提示用户存在相关的警告信息。


如果java.sql.SQLException: No suitable driver found该怎么办?


如果java.sql.SQLException: No suitable driver found该怎么办?

如果你的SQL URL串格式不正确的话,就会抛出这样的异常。不管是使用DriverManager还是JNDI数据源来创建连接都有可能抛出这种异常。它的异常栈看起来会像下面这样。

org.apache.tomcat.dbcp.dbcp.SQLNestedException:CannotcreateJDBCdriverofclass'com.mysql.jdbc.Driver'forconnectURL''jdbc:mysql://localhost:3306/UserDB'

   atorg.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452)

   atorg.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)

   atorg.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)

java.sql.SQLException:Nosuitabledriverfoundfor'jdbc:mysql://localhost:3306/UserDB

   atjava.sql.DriverManager.getConnection(DriverManager.java:604)

   atjava.sql.DriverManager.getConnection(DriverManager.java:221)

   atcom.journaldev.jdbc.DBConnection.getConnection(DBConnection.java:24)

   atcom.journaldev.jdbc.DBConnectionTest.main(DBConnectionTest.java:15)

Exceptioninthread"main"java.lang.NullPointerException

   atcom.journaldev.jdbc.DBConnectionTest.main(DBConnectionTest.java:16)

解决这类问题的方法就是,检查下日志文件,像上面的这个日志中,URL串是'jdbc:mysql://localhost:3306/UserDB,只要把它改成jdbc:mysql://localhost:3306/UserDB就好了。


JDBC的RowSet是什么,有哪些不同的RowSet?


JDBC的RowSet是什么,有哪些不同的RowSet?

RowSet用于存储查询的数据结果,和ResultSet相比,它更具灵活性。RowSet继承自ResultSet,因此ResultSet能干的,它们也能,而ResultSet做不到的,它们还是可以。RowSet接口定义在javax.sql包里。

RowSet提供的额外的特性有:

  • 提供了Java Bean的功能,可以通过settter和getter方法来设置和获取属性。RowSet使用了JavaBean的事件驱动模型,它可以给注册的组件发送事件通知,比如游标的移动,行的增删改,以及RowSet内容的修改等。
  • RowSet对象默认是可滚动,可更新的,因此如果数据库系统不支持ResultSet实现类似的功能,可以使用RowSet来实现

RowSet分为两大类:

  • A. 连接型RowSet——这类对象与数据库进行连接,和ResultSet很类似。JDBC接口只提供了一种连接型RowSet,javax.sql.rowset.JdbcRowSet,它的标准实现是com.sun.rowset.JdbcRowSetImpl。
  • B. 离线型RowSet——这类对象不需要和数据库进行连接,因此它们更轻量级,更容易序列化。它们适用于在网络间传递数据
  • CachedRowSet——可以通过他们获取连接,执行查询并读取ResultSet的数据到RowSet里。我们可以在离线时对数据进行维护和更新,然后重新连接到数据库里,并回写改动的数据。
  • WebRowSet继承自CachedRowSet——他可以读写XML文档。
  • JoinRowSet继承自WebRowSet——它不用连接数据库就可以执行SQL的join操作。
  • FilteredRowSet继承自WebRowSet——我们可以用它来设置过滤规则,这样只有选中的数据才可见。
  • 有四种不同的离线型RowSet的实现。


 什么是JDBC的最佳实践?


 什么是JDBC的最佳实践?

  • 数据库资源是非常昂贵的,用完了应该尽快关闭它。Connection, Statement, ResultSet等JDBC对象都有close方法,调用它就好了。
  • 养成在代码中显式关闭掉ResultSet,Statement,Connection的习惯,如果你用的是连接池的话,连接用完后会放回池里,但是没有关闭的ResultSet和Statement就会造成资源泄漏了。
  • 在finally块中关闭资源,保证即便出了异常也能正常关闭。
  • 大量类似的查询应当使用批处理完成
  • 尽量使用PreparedStatement而不是Statement,以避免SQL注入,同时还能通过预编译和缓存机制提升执行的效率。
  • 如果你要将大量数据读入到ResultSet中,应该合理的设置fetchSize以便提升性能
  • 你用的数据库可能没有支持所有的隔离级别,用之前先仔细确认下。
  • 数据库隔离级别越高性能越差,确保你的数据库连接设置的隔离级别是最优的。
  • 如果在WEB程序中创建数据库连接,最好通过JNDI使用JDBC的数据源,这样可以对连接进行重用。
  • 如果你需要长时间对ResultSet进行操作的话,尽量使用离线的RowSet。


如果文章有错的地方欢迎指正,大家互相交流。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5月前
|
SQL 安全 Java
Java面试题:什么是JDBC以及如何在Java中使用它进行数据库操作?
Java面试题:什么是JDBC以及如何在Java中使用它进行数据库操作?
55 0
|
5月前
|
SQL Java 关系型数据库
Java面试题:描述JDBC的工作原理,包括连接数据库、执行SQL语句等步骤。
Java面试题:描述JDBC的工作原理,包括连接数据库、执行SQL语句等步骤。
73 0
|
7月前
|
存储 JavaScript 前端开发
JDBC六部曲(二)_jdbc创建状态参数,2024年最新面试基本问题及答案
JDBC六部曲(二)_jdbc创建状态参数,2024年最新面试基本问题及答案
|
存储 SQL Java
Java面试题之数据库与JDBC 部分
106、有 3 个表(15 分钟):【基础】 Student 学生表 (学号,姓名,性别,年龄,组织部门) Course 课程表 (编号,课程名称 Sc 选课表 (学号,课程编号,成绩) 表结构如下:
36 0
|
Oracle Java 关系型数据库
玩转Java面试-什么是Java的JDBC?
Java的JDBC(Java Database Connectivity)是一种用于与数据库进行交互的API(Application Programming Interface)。
|
SQL Java 关系型数据库
JDBC面试核心必考知识点
JDBC核心知识点 如有编辑错误联系作者 如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 王恒杰 男、95后 现居天津 是一名学习java的菜鸟 是万千程序猿中的一只 喜欢编程,喜欢探索新技术,大学生活迷茫过,失落过,还好没有放弃 希望看到这里的你也不要轻易地放弃 这条路上的你并不是孤军奋战,有千千万万的猿在陪你前行
158 0
JDBC面试核心必考知识点
|
Java 数据库连接 开发者
java面试题:在Spring框架中如何更有效地使用JDBC?
java面试题:在Spring框架中如何更有效地使用JDBC?
java面试题:在Spring框架中如何更有效地使用JDBC?
|
Java 数据库连接 数据库
java面试题:解释JDBC抽象和DAO模块?
java面试题:解释JDBC抽象和DAO模块?
java面试题:解释JDBC抽象和DAO模块?
|
SQL 存储 Oracle
【面试专题】2022 年 30 大 JDBC 面试问题和答案
【面试专题】2022 年 30 大 JDBC 面试问题和答案
|
SQL 缓存 Oracle
一个基础又很重要的知识点:JDBC原理(基本案例和面试知识点)
JDBC全称又叫做Java DataBase Connectivity,就是Java数据库连接,说白了就是用Java语言来操作数据库。这篇文章主要是对JDBC的原理进行讲解。不会专注于其使用。主要是理解其思想并对一些常见的面试题进行讲解。
314 0
一个基础又很重要的知识点:JDBC原理(基本案例和面试知识点)
下一篇
DataWorks