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

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 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>



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
40 2
|
16天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
22天前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
18天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
41 4
|
19天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
68 4
|
1月前
|
存储 安全 算法
Java面试题之Java集合面试题 50道(带答案)
这篇文章提供了50道Java集合框架的面试题及其答案,涵盖了集合的基础知识、底层数据结构、不同集合类的特点和用法,以及一些高级主题如并发集合的使用。
96 1
Java面试题之Java集合面试题 50道(带答案)
|
1月前
|
存储 Java 程序员
Java面试加分点!一文读懂HashMap底层实现与扩容机制
本文详细解析了Java中经典的HashMap数据结构,包括其底层实现、扩容机制、put和查找过程、哈希函数以及JDK 1.7与1.8的差异。通过数组、链表和红黑树的组合,HashMap实现了高效的键值对存储与检索。文章还介绍了HashMap在不同版本中的优化,帮助读者更好地理解和应用这一重要工具。
55 5
|
30天前
|
存储 Java
[Java]面试官:你对异常处理了解多少,例如,finally中可以有return吗?
本文介绍了Java中`try...catch...finally`语句的使用细节及返回值问题,并探讨了JDK1.7引入的`try...with...resources`新特性,强调了异常处理机制及资源自动关闭的优势。
22 1
|
1月前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
30 3
|
2月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
434 37
下一篇
无影云桌面