Java面试题之数据库与JDBC 部分

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 106、有 3 个表(15 分钟):【基础】Student 学生表 (学号,姓名,性别,年龄,组织部门)Course 课程表 (编号,课程名称Sc 选课表 (学号,课程编号,成绩) 表结构如下:

106、有 3 个表(15 分钟):【基础】

Student 学生表 (学号,姓名,性别,年龄,组织部门)

Course 课程表 (编号,课程名称

Sc 选课表 (学号,课程编号,成绩) 表结构如下:

640.png

1) 写一个 SQL 语句,查询选修了’计算机原理’的学生学号和姓名(3 分钟

2) 写一个 SQL 语句,查询’周星驰’同学选修了的课程名字(3 分钟

3) 写一个 SQL 语句,查询选修了 5 门课程的学生学号和姓名(9 分钟

答:1)SQL 语句如下:select stu.sno, stu.sname from Student stu

where (select count(*) from sc where sno=stu.sno and cno = (select cno from Course where cname='计算机原理')) != 0;

select cname from Course

where cno in ( select cno from sc where sno =

(select sno from Student where sname='周星驰'));

select stu.sno, stu.sname from student stu

where (select count(*) from sc where sno=stu.sno) = 5;


107、有三张表,学生表 S,课程 C,学生课程表 SC,学生可以选修多门课程,一门课程可以被多个学生选修,通过 SC 表关联。【基础】

1)写出建表语句;

2) 写出 SQL 语句,查询选修了所有选修课程的学生;

3) 写出 SQL 语句,查询选修了至少 5 门以上的课程的学生。答:1)建表语句如下(mysql 数据库):

create table s(id integer primary key, name varchar(20));

create table c(id integer primary key, name varchar(20)); create table sc(

sid integer references s(id), cid integer references c(id), primary key(sid,cid));

select stu.id, stu.name from s stu

where (select count(*) from sc where sid=stu.id)

= (select count(*) from c);

select stu.id, stu.name from s stu

where (select count(*) from sc where sid=stu.id)>=5;


108、数据库表(Test)结构如下:【基础

IDNAMEAGEMANAGER(所属主管人ID)

要求:列出所有年龄比所属主管年龄大的人的 ID 和名字? 答:SQL 语句如下:

select employee.name from test employee

where employee.age > (select manager.age from test manager

where manager.id=employee.manager);


109、有如下两张表:【中等难度】


欲得到如下结果:

答:SQL 语句为:

SELECT C.CITYNO, C.CITYNAME, C.STATENO, S.STATENAME

FROM CITY C, STATE S

WHERE C.STATENO=S.STATENO(+)

ORDER BY(C.CITYNO);



五、JDBCHibernate:(12 题:基础 10 道,中等难度 2

110、数据库,比如 100 用户同时来访,要采取什么技术解决?【基础】

答:可采用连接池。

 

111、什么是 ORM?【基础】

答:对象关系映射(Object—RelationalMapping,简称 ORM)是一种为了解决面向对象与面向关系数据库存在的互不匹配的现象的技术;简单的说,ORM 是通过使用描述对象和数据库之间映射的元数据,将 java 程序中的对象自动持久化到关系数据库中;本质上就是将数据从一种形式转换到另外一种形式。

 

112、Hibernate 有哪 5 个核心接口?【基础】

Configuration 接口:配置 Hibernate,根据其启动 hibernate,创建SessionFactory 对象;

SessionFactory 接口:初始化 Hibernate,充当数据存储源的代理,创建session 对象,sessionFactory 是线程安全的,意味着它的同一个实例可以被应用的多个线程共享,是重量级、二级缓存;

Session 接口:负责保存、更新、删除、加载和查询对象,是线程不安全的, 避免多个线程共享同一个 session,是轻量级、一级缓存;

Transaction 接口:管理事务;Query 和 Criteria 接口:执行数据库的查询。

 

113、关于 hibernate: 【基础】

1) hibernate 中,在配置文件呈标题一对多,多对多的标签是什么;

2) Hibernate 的二级缓存是什么;

3) Hibernate 是如何处理事务的;

答:1)一对多的标签为<one-to-many> ;

多对多的标签为<many-to-many>;

2) sessionFactory 的缓存为 hibernate 的二级缓存;

3) Hibernate 的事务实际上是底层的 JDBC Transaction 的封装或者是 JTA

Transaction 的封装;默认情况下使用 JDBCTransaction。

 

114、Hibernate 的应用(Hibernate 的结构)?

【基础】

答:

//首先获得 SessionFactory 的对象
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();//然后获得 session 的对象Session session = sessionFactory.openSession();//其次获得 Transaction 的对象Transaction tx = session.beginTransaction();//执行相关的数据库操作:增,删,改,查session.save(user); //增加, user 是 User 类的对象 session.delete(user);  //删除  session.update(user);   //更新Query query = session.createQuery(“from User”); //查询List list = query.list();//提交事务tx.commit();//如果有异常,我们还要作事务的回滚,恢复到操作之前tx.rollback();//最后还要关闭 session,释放资源session.close();

 

115、什么是重量级?什么是轻量级?【基础】

答:轻量级是指它的创建和销毁不需要消耗太多的资源,意味着可以在程序中经常创建和销毁 session 的对象;重量级意味不能随意的创建和销毁它的实例,会占用很多的资源。


116、数据库的连接字符串?【基础】

答:

MS SQL Server//第二种连接方式Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”).newInstance();conn = DriverManager.getConnection(“jdbc:Microsoft:sqlserver://localhost:1433;DatabaseName=pubs”,”sa”,””);//Oracle Class.forName(“oracle.jdbc.driver.OracleDriver”).newInstance(); conn = DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:sid”, uid, pwd);//Mysql Class.forName(“org.git.mm.mysql.Driver”).newInstance(); conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/pubs”,”root”,””); 处 理 中 文 的 问 题 : jdbc:mysql://localhost:3306/pubs?useUnicode=true&characterEncoding=GB2312


117、事务处理?【基础】

答:Connection 类中提供了 3 个事务处理方法:

setAutoCommit(BooleanautoCommit):设置是否自动提交事务,默认为自动提交事务,即为 true,通过设置 false 禁止自动提交事务;commit():提交事务;rollback():回滚事务。

 

118Java 中访问数据库的步骤?StatementPreparedStatement 之间的区别?

【基础】

答:Java 中访问数据库的步骤如下:

1)注册驱动;

2)建立连接;  

3)创建 Statement;

5)处理结果集(若 sql 语句为查询语句);

6)关闭连接。

PreparedStatement 被创建时即指定了 SQL 语句,通常用于执行多次结构相同的 SQL 语句。

 

119、用你熟悉的语言写一个连接 ORACLE 数据库的程序,能够完成修改和查询工作。【基础】

答:JDBC 示例程序如下:

public void testJdbc(){Connection con = null; PreparedStatement ps = null; ResultSet rs = null;try{//step1:注 册 驱 动 ; Class.forName("oracle.jdbc.driver.OracleDriver");//step 2:获取数据库连接;con=DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.39:1521:TARENADB", "sd0605","sd0605");/************************查 询************************///step 3:创建 Statement;String sql = "SELECT id, fname, lname, age, FROM Person_Tbl"; ps = con.prepareStatement(sql);//step 4 :执行查询语句,获取结果集; rs = ps.executeQuery();//step 5:处理结果集—输出结果集中保存的查询结果;while (rs.next()){System.out.print("id = " + rs.getLong("id")); System.out.print(" , fname = " + rs.getString("fname")); System.out.print(" , lname = " + rs.getString("lname")); System.out.print(" , age = " + rs.getInt("age"));}/************************JDBC 修 改*********************/
sql = "UPDATE Person_Tbl SET age=23 WHERE id = ?"; ps = con.prepareStatement(sql);ps.setLong(1, 88);int rows = ps.executeUpdate(); System.out.println(rows + " rows affected.");} catch (Exception e){ e.printStackTrace();} finally{try{con.close(); //关闭数据库连接,以释放资源。} catch (Exception e1) {}}}


120、JDBC,Hibernate 分页怎样实现?【中等难度】

答:方法分别为:

1) Hibernate 的分页:

Query query = session.createQuery("from Student");

query.setFirstResult(firstResult);//设置每页开始的记录号query.setMaxResults(resultNumber);//设置每页显示的记录数Collection students = query.list();

2) JDBC 的分页:根据不同的数据库采用不同的 sql 分页语句

例如: Oracle 中的 sql 语句为: "SELECT * FROM (SELECT a.*, rownum r FROM TB_STUDENT) WHERE r between 2 and 10" 查询从记录号 2 到记录号 10 之间的所有记录

 

121、在 ORACLE 大数据量下的分页解决方法。一般用截取 ID 方法,还有是三层嵌套方法。【中等难度】

答:一种分页方法

<%int i=1;int numPages=14;String pages = request.getParameter("page") ; int currentPage = 1;currentPage = (pages==null)?(1):{Integer.parseInt(pages)} sql = "select count(*) from tables";ResultSet rs = DBLink.executeQuery(sql) ; while(rs.next()) i = rs.getInt(1) ;int intPageCount=1; intPageCount=(i%numPages==0)?(i/numPages):(i/numPages+1); int nextPage ;int upPage;nextPage = currentPage+1;if (nextPage>=intPageCount) nextPage=intPageCount;
upPage = currentPage-1; if (upPage<=1) upPage=1; rs.close();sql="select * from tables"; rs=DBLink.executeQuery(sql); i=0;while((i<numPages*(currentPage-1))&&rs.next()){i++;}%>//输出内容//输出翻页连接合计:<%=currentPage%>/<%=intPageCount%>页<a href="List.jsp?page=1">第一页</a><a href="List.jsp?page=<%=upPage%>">上一页</a><%for(int j=1;j<=intPageCount;j++){ if(currentPage!=j){%><a href="list.jsp?page=<%=j%>">[<%=j%>]</a><%}else{out.println(j);}}%><a href="List.jsp?page=<%=nextPage%>">下一页</a><a href="List.jsp?page=<%=intPageCount%>">最后页</a>



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
2月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
5月前
|
缓存 Java 关系型数据库
2025 年最新华为 Java 面试题及答案,全方位打造面试宝典
Java面试高频考点与实践指南(150字摘要) 本文系统梳理了Java面试核心考点,包括Java基础(数据类型、面向对象特性、常用类使用)、并发编程(线程机制、锁原理、并发容器)、JVM(内存模型、GC算法、类加载机制)、Spring框架(IoC/AOP、Bean生命周期、事务管理)、数据库(MySQL引擎、事务隔离、索引优化)及分布式(CAP理论、ID生成、Redis缓存)。同时提供华为级实战代码,涵盖Spring Cloud Alibaba微服务、Sentinel限流、Seata分布式事务,以及完整的D
336 0
|
5月前
|
存储 安全 Java
常见 JAVA 集合面试题整理 自用版持续更新
这是一份详尽的Java集合面试题总结,涵盖ArrayList与LinkedList、HashMap与HashTable、HashSet与TreeSet的区别,以及ConcurrentHashMap的实现原理。内容从底层数据结构、性能特点到应用场景逐一剖析,并提供代码示例便于理解。此外,还介绍了如何遍历HashMap和HashTable。无论是初学者还是进阶开发者,都能从中受益。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
289 3
|
4月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
452 0
|
4月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
227 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
2月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
5月前
|
存储 安全 Java
2025 最新史上最全 Java 面试题独家整理带详细答案及解析
本文从Java基础、面向对象、多线程与并发等方面详细解析常见面试题及答案,并结合实际应用帮助理解。内容涵盖基本数据类型、自动装箱拆箱、String类区别,面向对象三大特性(封装、继承、多态),线程创建与安全问题解决方法,以及集合框架如ArrayList与LinkedList的对比和HashMap工作原理。适合准备面试或深入学习Java的开发者参考。附代码获取链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
3063 48
|
5月前
|
算法 架构师 Java
Java 开发岗及 java 架构师百度校招历年经典面试题汇总
以下是百度校招Java岗位面试题精选摘要(150字): Java开发岗重点关注集合类、并发和系统设计。HashMap线程安全可通过Collections.synchronizedMap()或ConcurrentHashMap实现,后者采用分段锁提升并发性能。负载均衡算法包括轮询、加权轮询和最少连接数,一致性哈希可均匀分布请求。Redis持久化有RDB(快照恢复快)和AOF(日志更安全)两种方式。架构师岗涉及JMM内存模型、happens-before原则和无锁数据结构(基于CAS)。
168 5
|
5月前
|
Java API 微服务
2025 年 Java 校招面试全攻略:从面试心得看 Java 岗位求职技巧
《2025年Java校招最新技术要点与实操指南》 本文梳理了2025年Java校招的核心技术栈,并提供了可直接运行的代码实例。重点技术包括: Java 17+新特性(Record类、Sealed类等) Spring Boot 3+WebFlux响应式编程 微服务架构与Spring Cloud组件 Docker容器化部署 Redis缓存集成 OpenAI API调用 通过实际代码演示了如何应用这些技术,如Java 17的Record类简化POJO、WebFlux构建响应式API、Docker容器化部署。
264 5
下一篇
oss云网关配置