JDBC 期末考试试题及详细答案_第1页
JDBC 期末考试试题及详细答案_第2页
JDBC 期末考试试题及详细答案_第3页
JDBC 期末考试试题及详细答案_第4页
JDBC 期末考试试题及详细答案_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JDBC期末考试试题及详细答案考试说明:满分100分,考试时间90分钟,题型包含选择题、填空题、简答题、编程题,侧重基础知识点与实际代码应用。一、单项选择题(每题3分,共30分)1.以下关于JDBC的说法,正确的是()A.JDBC是一套数据库专用的编程语言B.JDBC是Java访问数据库的标准接口规范C.JDBC可以直接操作所有数据库,无需驱动包D.JDBC只能连接MySQL数据库2.使用JDBC连接MySQL数据库,以下不属于必备参数的是()A.数据库URLB.数据库用户名C.数据库密码D.数据库表名3.JDBC中,负责加载数据库驱动的核心代码是()A.Connection.getConnection()B.Class.forName()C.Statement.createStatement()D.DriverManager.getConnection()4.下列JDBC对象中,用于执行静态SQL语句的是()A.ConnectionB.StatementC.PreparedStatementD.ResultSet5.关于PreparedStatement的优势,说法错误的是()A.可以有效防止SQL注入攻击B.支持SQL语句预编译,执行效率更高C.必须手动拼接SQL语句参数D.代码可读性、维护性优于Statement6.ResultSet对象的默认游标位置是()A.第一行数据上方B.第一行数据位置C.最后一行数据位置D.最后一行数据下方7.JDBC操作数据库的标准执行顺序正确的是()①获取连接②加载驱动③关闭资源④执行SQL⑤创建执行对象A.②①⑤④③B.①②⑤④③C.②①④⑤③D.①②④⑤③8.以下JDBC资源关闭顺序正确的是()A.Connection→Statement→ResultSetB.ResultSet→Statement→ConnectionC.随意关闭无顺序要求D.Statement→ResultSet→Connection9.想要实现数据库事务手动提交,需要将Connection的哪个参数设置为false()A.setAutoCommitB.setCommitC.setRollbackD.setTransaction10.执行DML语句(增删改)后,可通过哪个方法获取受影响的行数()A.getRow()B.executeUpdate()返回值C.executeQuery()返回值D.count()二、填空题(每空2分,共20分)1.JDBC的全称是________________________。2.MySQL数据库的标准JDBCURL格式是________________________。3.JDBC三大核心接口分别是Connection、________________、________________。4.事务的四大特性(ACID)分别是原子性、一致性、________________、________________。5.使用PreparedStatement设置参数时,参数下标从________开始计数。6.JDBC中执行查询语句使用________方法,执行增删改语句使用________方法。7.结束数据库事务的两种操作是提交和________。三、简答题(每题10分,共30分)1.简述Statement和PreparedStatement的核心区别,以及实际开发中优先使用PreparedStatement的原因。2.简述JDBC操作数据库的完整步骤,并说明每一步的作用。3.什么是SQL注入?结合JDBC说明如何避免SQL注入问题。四、编程实操题(共20分)已知MySQL数据库:test_db,数据表user(idint主键自增,usernamevarchar(20),passwordvarchar(20),ageint)。数据库账号:root,密码:123456,端口:3306。请编写完整JDBC代码,实现添加一条用户数据的功能,要求:1.使用PreparedStatement实现;2.手动处理异常;3.规范关闭所有JDBC资源;4.输出执行结果(受影响行数)。参考答案及详细解析一、单项选择题答案及解析1.B解析:JDBC是Java数据库连接规范,是一套接口,并非编程语言,需要对应数据库驱动包才能使用,支持所有主流关系型数据库。2.D解析:JDBC连接数据库必备参数为URL、用户名、密码,表名是执行SQL语句时使用,并非连接数据库的参数。3.B解析:Class.forName()用于加载数据库驱动类,注册驱动;DriverManager.getConnection()用于获取数据库连接。4.B解析:Statement用于执行静态SQL;PreparedStatement用于执行预编译SQL;Connection是连接对象,ResultSet是查询结果集对象。5.C解析:PreparedStatement使用占位符?传递参数,无需手动拼接SQL语句,有效避免拼接错误和SQL注入。6.A解析:ResultSet游标默认指向第一行数据的上方,需要调用next()方法向下移动游标读取数据。7.A解析:标准流程:加载驱动→获取数据库连接→创建SQL执行对象→执行SQL语句→关闭释放资源。8.B解析:资源关闭遵循后开先关原则,开启顺序:Connection→Statement→ResultSet,关闭顺序相反。9.A解析:Connection默认自动提交事务,调用setAutoCommit(false)关闭自动提交,实现手动控制事务。10.B解析:executeUpdate()方法执行增删改语句,返回int类型值,代表数据库中受影响的行数。二、填空题答案1.JavaDataBaseConnectivity(Java数据库连接)2.jdbc:mysql://localhost:3306/数据库名?useSSL=false&serverTimezone=UTC3.Statement(或PreparedStatement)、ResultSet4.隔离性、持久性5.16.executeQuery()、executeUpdate()7.回滚(rollback)三、简答题详细答案1.Statement和PreparedStatement的区别及优选原因(1)核心区别:①编译方式:Statement执行静态SQL,每次执行都会重新编译;PreparedStatement支持SQL预编译,语句只需编译一次,可重复执行。②参数传递:Statement需要手动字符串拼接SQL参数,容易出错;PreparedStatement使用?占位符传参,参数和SQL语句分离。③安全性:Statement存在严重SQL注入风险;PreparedStatement从底层规避SQL注入问题。(2)优选PreparedStatement的原因:执行效率更高、安全性好、代码简洁易维护、避免参数拼接错误。2.JDBC操作数据库完整步骤及作用①加载数据库驱动:通过Class.forName()加载对应数据库驱动类,让程序识别数据库驱动,完成驱动注册。②获取数据库连接:通过DriverManager.getConnection()创建Java程序与数据库的通信通道。③创建SQL执行对象:创建Statement或PreparedStatement对象,用于承载并执行SQL语句。④执行SQL语句:根据SQL类型,调用executeQuery()或executeUpdate()执行语句,获取结果或执行状态。⑤处理执行结果:查询语句遍历ResultSet结果集获取数据,增删改语句获取受影响行数。⑥关闭资源:依次关闭结果集、执行对象、连接对象,释放数据库资源,避免资源占用泄漏。3.SQL注入原理及规避方案(1)SQL注入:是一种数据库攻击手段,用户通过输入恶意字符串,拼接进SQL语句中,改变SQL原有执行逻辑,实现非法查询、篡改数据的目的。根源是Statement手动拼接SQL参数,用户输入内容可参与SQL编译。(2)规避方法:开发中统一使用PreparedStatement,利用其预编译特性,将SQL语句结构和参数完全分离,用户输入的参数仅作为普通数据处理,不会参与SQL编译,彻底杜绝SQL注入。四、编程题参考答案(完整可运行代码)java

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.PreparedStatement;

importjava.sql.SQLException;

publicclassJdbcAddUser{

publicstaticvoidmain(String[]args){

//1.定义数据库连接参数

Stringdriver="com.mysql.cj.jdbc.Driver";

Stringurl="jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC";

Stringuser="root";

Stringpassword="123456";

//定义JDBC对象,提升作用域,方便finally关闭

Connectionconn=null;

PreparedStatementpstmt=null;

try{

//2.加载驱动

Class.forName(driver);

//3.获取数据库连接

conn=DriverManager.getConnection(url,user,password);

//4.编写预编译SQL语句

Stringsql="insertintouser(username,password,age)values(?,?,?)";

//5.创建预编译执行对象

pstmt=conn.prepareStatement(sql);

//6.给占位符设置参数

pstmt.setString(1,"张三");

pstmt.setString(2,"123abc");

pstmt.setInt(3,22);

//7.执行SQL,获取受影响行数

introws=pstmt.executeUpdate();

//输出执行结果

System.out.println("数据添加成功,受影响行数:"+rows);

}catch(ClassNotFoundExceptione){

System.out.println("数据库驱动加载失败!");

e.printStackTrace();

}catch(SQLExceptione){

System.out.println("数据库操作异常!");

e.printStackTrace();

}finally{

//8.规范关闭资源,后开先关

try{

if(pstmt!=null){

pstmt.close();

}

}catch(SQLExceptione){

e.printStackTrace();

}

try{

if(co

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论