还剩9页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
java数据库的面试题和答案
一、选择题(本题型共15题,每题2分,共30分)
1.以下关于JDBC的说法,正确的是?()A.JDBC是一种数据库编程语言B.JDBC提供了一套用于执行SQL语句的Java APIC.JDBC只能连接MySQL数据库D.使用JDBC时无需加载驱动类
2.数据库事务的ACID特性中,“原子性”指的是?()A.事务中的所有操作要么全部完成,要么全部不完成B.事务一旦提交,对数据库的改变就是永久的C.多个事务并发执行时,一个事务的执行不能被其他事务的操作干扰D.事务应该提供一种机制,让用户知道事务是否成功完成
3.以下哪项不是数据库连接池的作用?()A.减少创建和关闭连接的开销B.提高数据库连接的复用率C.自动处理数据库表的创建D.控制连接的数量,防止数据库过载
4.SQL语句中,用于向表中插入数据的关键字是?()A.SELECTB.INSERTC.UPDATED.DELETE
5.数据库中,“索引”的主要作用是?()A.提高查询性能第1页共11页B.唯一标识表中的记录C.自动备份数据D.加速数据插入操作
6.在JDBC中,用于执行静态SQL语句并返回其生成结果的对象是?()A.DriverManagerB.ConnectionC.StatementD.PreparedStatement
7.以下哪种数据库不属于关系型数据库?()A.MySQLB.OracleC.MongoDBD.SQL Server
8.事务隔离级别中,“读未提交”(Read Uncommitted)可能导致的问题是?()A.脏读B.不可重复读C.幻读D.以上都不会
9.JDBC中,用于处理SQL语句执行结果的对象是?()A.ConnectionB.StatementC.ResultSetD.Driver第2页共11页
10.SQL语句中,用于修改表中数据的关键字是?()A.INSERTB.UPDATEC.DELETED.SELECT
11.数据库中,“外键”的作用是?()A.确保表中每条记录的唯一性B.建立表与表之间的关联关系C.加速数据查询速度D.自动维护数据的完整性约束
12.在JDBC中,关闭数据库连接时,通常的关闭顺序是?()A.Connection→Statement→ResultSetB.ResultSet→Statement→ConnectionC.Statement→ResultSet→ConnectionD.无固定顺序
13.以下哪种情况会导致SQL注入攻击?()A.使用PreparedStatement执行SQL语句B.用户输入的数据直接拼接到SQL语句中C.对用户输入的数据进行长度限制D.使用参数化查询
14.数据库中,“视图”(View)的主要特点是?()A.存储实际数据,与基表无关B.是一个虚拟表,基于基表的查询结果C.只能用于查询数据,不能用于插入数据D.无法被修改第3页共11页
15.在JDBC中,通过哪个方法可以获取数据库元数据(如数据库版本、表结构等)?()A.Connection.getMetaDataB.Statement.getMetaDataC.ResultSet.getMetaDataD.Driver.getMetaData
二、填空题(本题型共15题,每题1分,共15分)
1.JDBC中,用于建立与数据库连接的接口是__________
2.SQL语句中,用于查询数据的关键字是__________
3.数据库中,主键的作用是__________
4.事务的四个特性是原子性、一致性、隔离性和__________
5.用于在JDBC中预编译SQL语句,防止SQL注入的接口是__________
6.数据库连接池的核心参数通常包括最小连接数、最大连接数和__________
7.SQL语句中,用于创建数据库表的关键字是__________
8.数据库中,“索引”可以分为主键索引、唯一索引和__________
9.JDBC中,通过__________类加载数据库驱动
10.事务隔离级别中,“可重复读”(Repeatable Read)是__________数据库默认的隔离级别(如MySQL)
11.SQL语句中,用于删除表中数据的关键字是__________
12.数据库中,“表名.字段名”的形式称为__________
13.在JDBC中,通过__________方法设置事务的自动提交状态(默认是true)第4页共11页
14.SQL语句中,用于对查询结果进行分组统计的关键字是__________
15.数据库中,“约束”的作用是__________
三、简答题(本题型共10题,每题3分,共30分)
1.简述JDBC连接数据库的基本步骤
2.什么是数据库事务的隔离级别?JDBC中如何设置事务隔离级别?
3.索引的优缺点是什么?什么情况下适合为表添加索引?
4.简述PreparedStatement相比Statement的优势
5.什么是脏读、不可重复读和幻读?它们分别属于事务隔离级别中的哪种问题?
6.数据库连接池的工作原理是什么?常用的Java数据库连接池技术有哪些?
7.什么是ORM框架?简述其主要作用
8.SQL语句优化的常用方法有哪些?(至少列举3种)
9.什么是数据库的范式?第一范式、第二范式和第三范式的核心要求分别是什么?
10.简述JDBC中Statement、PreparedStatement和CallableStatement的区别
四、判断题(本题型共10题,每题1分,共10分)
1.数据库中的索引越多越好,因为可以提高查询效率()
2.JDBC中,使用Connection的setAutoCommitfalse方法可以关闭事务的自动提交()
3.SQL注入攻击的本质是利用用户输入的数据修改SQL语句的逻辑()第5页共11页
4.事务的“一致性”是指事务执行前后,数据库的状态保持一致(如数据总量不变)()
5.MySQL中,InnoDB存储引擎支持事务,而MyISAM存储引擎不支持事务()
6.PreparedStatement只能执行查询操作,不能执行增删改操作()
7.视图(View)是一个实际存储数据的表,与基表的数据同步更新()
8.数据库连接池的最大连接数应设置得越大越好,以提高并发处理能力()
9.在JDBC中,ResultSet的next方法返回true表示当前行有数据,false表示已到结果集末尾()
10.SQL中的“DISTINCT”关键字用于去除查询结果中的重复行()
五、案例分析题(本题型共5题,每题5分,共25分)
1.以下是一段JDBC代码,运行时出现“ClassNotFoundException”错误,请分析可能的原因及解决方法Class.forNamecom.mysql.jdbc.Driver;Connection conn=DriverManager.getConnectionjdbc:mysql://localhost:3306/test,root,123456;
2.已知表结构学生表(student,字段idint,主键、namevarchar、ageint、class_idint),班级表(class,字段class_idint,主键、class_namevarchar)若需查询所有学生的姓名、班级名称,应使用什么SQL语句?说明原因第6页共11页
3.以下是一段使用Statement执行SQL的代码,存在安全隐患和性能问题,请指出问题并优化String name=request.getParametername;String sql=SELECT*FROM student WHERE name=+name+;Statement stmt=conn.createStatement;ResultSet rs=stmt.executeQuerysql;
4.数据库中有表orders(字段order_idint,主键、user_idint、amountdouble、create_timedatetime),若需查询2025年10月1日至2025年10月31日期间,用户ID为1001的订单总金额,且金额大于1000的订单记录,应如何优化查询效率?
5.简述在多线程环境下使用JDBC连接数据库时,需要注意哪些问题?如何解决?
六、代码题(本题型共5题,每题5分,共25分)
1.已知表student,包含字段idint、namevarchar、ageint、scoredouble,请编写SQL语句查询年龄大于18且成绩大于90分的学生姓名和成绩,按成绩降序排列
2.补全以下JDBC代码,实现查询学生表中所有学生的姓名和年龄,并打印结果(假设已建立连接conn)Statement stmt=conn.createStatement;String sql=SELECT name,age FROM student;ResultSet rs=stmt.executeQuerysql;//补全代码遍历ResultSet并打印结果
3.编写SQL语句,创建一个名为“student_copy”的表,结构与student表完全一致(包括字段名、数据类型和主键)第7页共11页
4.使用JDBC的PreparedStatement,编写代码实现向学生表插入一条记录(id=101,name=张三,age=20,score=
95.5),并处理可能的异常
5.编写SQL语句,查询每个班级的平均年龄,结果按平均年龄升序排列(班级表class,学生表student,关联字段class_id)答案汇总
一、选择题答案
1.B
2.A
3.C
4.B
5.A
6.C
7.C
8.A
9.C
10.B
11.B
12.B
13.B
14.B
15.A
二、填空题答案
1.Connection
2.SELECT
3.唯一标识表中的每条记录
4.持久性
5.PreparedStatement
6.最大空闲时间
7.CREATE TABLE
8.普通索引(或非聚簇索引)
9.Class.forName
10.MySQL
11.DELETE
12.限定名(或带表名的字段名)
13.setAutoCommit
14.GROUP BY
15.保证数据的完整性和一致性
三、简答题答案
1.加载驱动类、建立数据库连接(通过DriverManager.getConnection)、创建Statement或PreparedStatement对象、执行SQL语句、处理结果集、关闭资源(ResultSet、Statement、Connection)
2.事务隔离级别定义了多个并发事务之间相互干扰的程度,常见有读未提交、读已提交、可重复读、串行化JDBC中通过Connection.setTransactionIsolationint level设置,如Connection.TRANSACTION_READ_COMMITTED第8页共11页
3.优点提高查询效率;缺点降低插入/更新/删除性能,占用存储空间适合查询频繁字段、主键字段、外键字段、大数据量表
4.预编译SQL,减少重复编译开销;参数化查询,防止SQL注入;类型安全,自动检查参数类型
5.脏读读取未提交事务的数据;不可重复读同一事务内多次读取同一记录结果不同;幻读同一查询条件下,多次执行结果行数不同
6.工作原理预先创建一定数量的数据库连接,用户请求时从池中获取,使用后放回池中,避免频繁创建/关闭连接常用技术DBCP、C3P
0、Druid
7.ORM(对象关系映射)框架将Java对象与数据库表进行映射,开发者无需直接编写SQL,通过操作对象实现数据库操作,简化开发并提高代码可读性
8.避免全表扫描、创建合适索引、优化JOIN操作、避免使用SELECT*、合理使用分页、避免在WHERE子句中对字段使用函数或表达式
9.范式是数据库设计的规范,用于减少数据冗余1NF属性不可再分;2NF非主属性完全依赖主键,消除部分依赖;3NF非主属性不依赖于其他非主属性,消除传递依赖
10.Statement执行静态SQL,每次执行需编译;PreparedStatement预编译SQL,支持参数化查询,防注入;CallableStatement执行存储过程
四、判断题答案
1.错
2.对
3.对
4.对
5.对
6.错
7.错
8.错
9.对
10.对
五、案例分析题答案第9页共11页
1.可能原因未导入数据库驱动JAR包;驱动类名错误(如MySQL
8.0+驱动类应为com.mysql.cj.jdbc.Driver)解决方法导入对应驱动JAR包;修正驱动类名
2.使用内连接(INNER JOIN)SELECT s.name,c.class_name FROMstudents INNERJOIN classc ONs.class_id=c.class_id;原因需关联查询两个表的字段,内连接可筛选出两表中关联字段匹配的记录
3.问题存在SQL注入风险(用户输入name含特殊字符如OR1=1);性能问题(每次执行均需编译SQL)优化使用PreparedStatement,将SQL改为SELECT*FROM studentWHEREname=,通过setString设置参数
4.优化方法在order_id和create_time字段上创建复合索引(user_id,create_time);使用BETWEEN子句明确时间范围(WHERE create_time BETWEEN2025-10-01AND2025-10-31);避免SELECT*,只查询必要字段
5.注意问题及解决线程安全问题(Connection不是线程安全的,需每个线程独立获取连接);连接泄露(未关闭资源导致连接无法释放)解决使用ThreadLocal存储连接;确保finally块中关闭资源;设置连接超时时间
六、代码题答案
1.SELECT name,score FROMstudentWHEREage18AND score90ORDER BYscore DESC;
2.while rs.next{String name=rs.getStringname;int age=rs.getIntage;System.out.println姓名+name+,年龄+age;}rs.close;stmt.close;第10页共11页
3.CREATE TABLEstudent_copy ASSELECT*FROMstudentWHERE1=2;(或使用CREATE TABLEstudent_copy LIKEstudent;)
4.String sql=INSERT INTOstudent id,name,age,scoreVALUES,,,;PreparedStatement pstmt=conn.prepareStatementsql;pstmt.setInt1,101;pstmt.setString2,张三;pstmt.setInt3,20;pstmt.setDouble4,
95.5;pstmt.executeUpdate;pstmt.close;
5.SELECT c.class_name,AVGs.age ASavg_age FROMclass cLEFTJOIN students ONc.class_id=s.class_id GROUPBYc.class_id ORDERBY avg_age ASC;第11页共11页。
个人认证
优秀文档
获得点赞 0