2024年4月11日发(作者:)
JDBC面试题
jdbc常见面试题集锦
一、 概念
1.什么是jdbc,在什么时候会用到它?
JDBC的全称是java数据库连接,即java数据库连接。我们可以用它来操作关系数据
库。Java SQL包中的JDBC接口和相关类,以及SQL包中的javax。我们可以使用它连接
到数据库,执行SQL查询,存储过程,并处理返回的结果。JDBC接口使Java程序和JDBC
驱动程序松散耦合,更容易在不同的数据库之间切换。
2.有哪些不同类型的jdbc驱动?
JDBC驱动程序有四种类型。与数据库交互的Java程序分为两部分。其中一部分是
JDBCAPI,实际的驱动程序是另一部分。(1) JDBC ODBC bridgeplusodbcdriver(类型
1):它使用ODBC驱动程序连接到数据库。需要安装ODBC才能连接到数据库。因此,这
种方法基本上被消除了。(2) 原生API部分支持Java技术的驱动程序(类型2):该驱
动程序将JDBC调用调整为对数据库本地接口的调用。(3) 数据库中间件的Purejava驱
动程序(类型3):该驱动程序将JDBC调用转发给中间件服务器,后者连接到不同的数据
库。使用这种类型的驱动程序需要部署中间件服务器。这种方法会增加额外的网络调用,
导致性能低下,因此很少使用。(4) 直接到数据库purejava驱动程序(类型4):该驱
动程序将JDBC转换为数据库使用的网络协议。该方案最简单,适合通过网络连接到数据
库。但是,如果使用此方法,则需要根据不同的数据库选择特定的驱动程序。例如,
ojdbc是Oracle开发的Oracle数据库的驱动程序,MySQL connector/J是MySQL数据库
的驱动程序。
是如何实现java程序和jdbc驱动的松耦合的?
JDBCAPI使用java反射机制来实现java程序和JDBC驱动程序之间的松耦合。只看一
个简单的JDBC示例,您会发现所有操作都是通过JDBC接口完成的,驱动程序只通过类完
成,只有在加载forname反射机制时才会出现。
4.什么是jdbc连接,在java中如何创建一个jdbc连接?
JDBC连接是与数据库服务器建立的会话。您可以将其想象为与数据库的套接字连接。
创建JDBC连接很简单,只需要两个步骤:
a.注册并加载驱动:使用e(),驱动类就会注册到drivermanager里面
并加载到内存里。b.用drivermanager获取连接对象:调用
nnection()方法并传入数据库连接的url,用户名及密码,就能获
取到连接对象。
connectioncon=null;试试看{
//loadthedriverclass
班forname(/立即创建连接
con=nection(}catch(sqlexceptione){
系统出来println(tacktrace();
}catch(classnotfoundexceptione){
系统出来println(tacktrace();
}
的驱动程序管理器是用来做什么的?
jdbc的drivermanager是一个工厂类,我们通过它来创建数据库连接。当jdbc的
driver类被加载进来时,它会自己注册到drivermanager类里面,你可以看下
jdbcdriver类的源码来了解一下。然后我们会把数据库配置信息传成
nection()方法,drivermanager会使用注册到它里面的驱动来获取
数据库连接,并返回给调用的程序。
6.如何在Java程序中获取数据库服务器的相关信息?
使用databasemetadata可以获取到服务器的信息。当和数据库的连接成功建立了之
后,可以通过调用getmetadata()方法来获取数据库的元信息。databasemetadata里面有
很多方法,通过它们可以获取到数据库的产品名称,版本号,配置信息等。
databasemetadatametadata=con。getmetadata();
stringdbproduct=abaseproductname();
7.什么是JDBC声明?
statement是jdbc中用来执行数据库sql查询语句的接口。通过调用连接对象的
getstatement()方法我们可以生成一个statement对象。我们可以通过调用它的
execute(),executequery(),executeupdate()方法来执行静态sql查询。
由于SQL语句是从程序传入的,如果用户输入未经验证,可能会导致SQL注入问题。
如果您想了解更多关于SQL注入的信息,可以在这里看到。默认情况下,一条语句只能打
开一个结果集。如果要操作多个resultset对象,则需要创建多个语句。
statement接口的所有execute方法开始执行时都默认会关闭当前打开的resultset。
e、executeQuery和executeupdate之间有什么区别?
statement的execute(stringquery)方法用来执行任意的sql查询,如果查询的结果
是一个resultset,这个方法就返回true。如果结果不是resultset,比如insert或者
update查询,它就会返回false。我们可以通过它的getresultset方法来获取resultset,
或者通过getupdatecount()方法来获取更新的记录条数。
语句的executeQuery(stringquery)接口用于执行select查询并返回结果集。即使
查询找不到记录,返回的结果集也不会为空。我们通常使用executeQuery来执行查询语
句。这样,如果传入insert或update语句,它将抛出一个带有错误消息
“executequerymethod不能用于update”util的java。sqlexception
statement的executeupdate(stringquery)方法用来执行insert或者update/delete
(dml)语句,或者什么也不返回ddl语句。返回值是int类型,如果是dml语句的话,
它就是更新的条数,如果是ddl的话,就返回0。
只有在不确定execute()是什么语句时,才应该使用它。否则,应使用
executeQuery或executeupdate方法。
的preparedstatement是什么?
Preparedstatement对象表示预编译的SQL语句。它提供的setter方法可用于传入查
询变量。因为准备好的语句是预编译的,所以它可以多次有效地执行相应的SQL语句。由
于Preparedstatement会自动转义特殊字符并避免SQL注入攻击,因此应该尽可能多地使
用它。如何将空值注入Preparedstatement?
可以使用它的setnull方法来把null值绑定到指定的变量上。setnull方法需要传入
参数的索引以及sql字段的类型,像这样:
l(10,r);。
statement中的getgeneratedkeys方法有什么用?
有时表会生成主键。此时,可以使用语句的getgeneratedkeys()方法获取自动生成
的主键的值。与报表相比,准备好的报表有哪些优点?
它和statement相比优点在于:preparedstatement有助于防止sql注入,因为它会
自动对特殊字符转义。preparedstatement可以用来进行动态查询。preparedstatement
执行更快。尤其当你重用它或者使用它的拼量查询接口执行多条语句时。使用
preparedstatement的setter方法更容易写出面向对象的代码,而statement的话,我们
得拼接字符串来生成查询语句。如果参数太多了,字符串拼接看起来会非常丑陋并且容易
出错。
8.编制报表的缺点是什么?如何解决这个问题?
发布评论