⾯试题:JDBC精选10道⾯试题
1.什么是JDBC,在上⾯时候会⽤到它?
JDBC的全称是Java DataBase Connection,也就是Java数据库连接,我们可以⽤它来操作关系型数据库。JDBC接⼝及相关类在java.sql 包和javax.sql包⾥。我们可以⽤它来连接数据库,执⾏SQL查询,存储过程,并处理返回的结果。
JDBC接⼝让Java程序和JDBC驱动实现了松耦合,使得切换不同的数据库变得更加简单。
2.JDBC访问数据库的基本步骤是什么?
a、加载(注册)数据库驱动(到JVM)
b、建⽴(获取)数据库连接。
c、创建(获取)数据库操作对象。
d、定义操作的SQL语句。
e、执⾏数据库操作。多表查询sql语句面试题
f、获取并操作结果集。
g、关闭对象,回收数据库资源(关闭结果集–>关闭数据库操作对象–>关闭连接)
a、Statement的execute(String query)⽅法⽤来执⾏任意的SQL查询,如果查询的结果是⼀个ResultSet,这个⽅法就返回true。如果结果不是ResultSet,⽐如insert或者update查询,它就会返回false。
b、Statement的executeQuery(String query)接⼝⽤来执⾏select查询,并且返回ResultSet。即使查询不到记录返回的ResultSet也不会为null。我们通常使⽤executeQuery来执⾏查询语句,这样的话如果传进来的是insert或者update语句的 话,它会抛出错误信息为“executeQuery method can not be used for update”的java.util.SQLException。
c、Statement的executeUpdate(String query)⽅法⽤来执⾏insert或者update/delete(DML)语句。
d、只有当你不确定是什么语句的时候才应该使⽤execute()⽅法,否则应该使⽤executeQuery或者executeUpdate⽅法。
4.JDBC的PreparedStatement是什么?
PreparedStatement对象代表的是⼀个预编译的SQL语句。⽤它提供的setter⽅法可以传⼊查询的变量。由于PreparedStatement是预编译的,通过它可以将对应的SQL语句⾼效的执⾏多次。
由于PreparedStatement⾃动对特殊字符转义,避免了SQL注⼊攻击,因此应当尽量的使⽤它。
5.相对于Statement,PreparedStatement的优点是什么?
a、PreparedStatement有助于防⽌SQL注⼊,因为它会⾃动对特殊字符转义。
b、PreparedStatement可以⽤来进⾏动态查询。
c、PreparedStatement执⾏更快。尤其当你重⽤它或者使⽤它的拼量查询接⼝执⾏多条语句时。
d、使⽤PreparedStatement的setter⽅法更容易写出⾯向对象的代码,⽽Statement的话,我们得拼接字符串来⽣成查询语句。如果参数太多了,字符串拼接看起来会⾮常丑陋并且容易出错。
6.JDBC的ResultSet是什么?
在查询数据库后会返回⼀个ResultSet,它就像是查询结果集的⼀张数据表。ResultSet对象维护了⼀个游标,指向当前的数据 ⾏。开始的时候这个游标指向的是第⼀⾏。如果调⽤了ResultSet的next()⽅法
游标会下移⼀⾏,如果没有更多的数据了, next()⽅法会返回false。可以在for循环中⽤它来遍历数据集。
7.java.util.Date和java.sql.Date有什么区别?
java.util.Date包含⽇期和时间,⽽java.sql.Date只包含⽇期信息,⽽没有具体的时间信息。如果你想把时间信息存储在数据库⾥,可以考虑使⽤Timestamp或者DateTime字段。
8.说说事务的概念,在JDBC编程中处理事务的步骤。
事务是作为单个逻辑⼯作单元执⾏的⼀系列操作,⼀个逻辑⼯作单元必须有四个属性,称为原⼦性、⼀致性、隔离性和持久性(ACID) 属性,只有这样才能成为⼀个事务 。JDBC处理事务有如下操作:
conn.setAutoComit(false);设置提交⽅式为⼿⼯提交。
connmit()提交事务。
提交与回滚只选择⼀个执⾏。正常情况下提交事务,如果出现异常,则回滚。
9.数据库连接池的原理。为什么要使⽤连接池。
数据库连接是⼀种关键的有限的昂贵的资源,对数据库连接的管理能显著影响到整个应⽤程序的伸缩性和健壮性,影响到程序 的性能指标。数据库连接池正是针对这个问题提出来的。
数据库连接池负责分配、管理和释放数据库连接,它允许应⽤程序重复使⽤⼀个现有的数据库连接,⽽不是重新建⽴⼀个;释放空闲时间超过最⼤空闲时间的数据库连接来避免因为没有释放数据库连接⽽引起的数据库连接遗漏。这项技术能明显提⾼对数据库操作的性能。
数据库连接池在初始化时将创建⼀定数量的数据库连接放到连接池中,这些数据库连接的数量是由最⼩数据库连接数来设定的。⽆论这些数据库连接是否被使⽤,连接池都将⼀直保证⾄少拥有这么多的连接数量。连接池的最⼤数据库连接数量限定了这个连接池能占有的最⼤连接数,当应⽤程序向连接池请求的连接数超过最⼤连接数量时,这些请求将被加⼊到等待队列中。
10.什么是JDBC的最佳实践?
a、数据库资源是⾮常昂贵的,⽤完了应该尽快关闭它。Connection, Statement, ResultSet等JDBC对象都有close⽅法,调⽤它就好了。
b、养成在代码中显式关闭掉ResultSet,Statement,Connection的习惯,如果你⽤的是连接池的话,
连接⽤完后会放回池⾥,但是没有关闭的ResultSet和Statement就会造成资源泄漏了。
c、在finally块中关闭资源,保证即便出了异常也能正常关闭。
d、尽量使⽤PreparedStatement⽽不是Statement,以避免SQL注⼊,同时还能通过预编译和缓存机制提升执⾏的效率。
e、数据库隔离级别越⾼性能越差,确保你的数据库连接设置的隔离级别是最优的。
f、如果在WEB程序中创建数据库连接,最好通过JNDI使⽤JDBC的数据源,这样可以对连接进⾏重⽤。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论