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

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



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
安全 架构师 Java
Java大厂面试高频:Collection 和 Collections 到底咋回答?
Java中的`Collection`和`Collections`是两个容易混淆的概念。`Collection`是集合框架的根接口,定义了集合的基本操作方法,如添加、删除等;而`Collections`是一个工具类,提供了操作集合的静态方法,如排序、查找、同步化等。简单来说,`Collection`关注数据结构,`Collections`则提供功能增强。通过小王的面试经历,我们可以更好地理解这两者的区别及其在实际开发中的应用。希望这篇文章能帮助你掌握这个经典面试题。
87 4
|
1月前
|
缓存 安全 Java
java面试-基础语法与面向对象
本文介绍了 Java 编程中的几个核心概念。首先,详细区分了方法重载与重写的定义、发生阶段及规则;其次,分析了 `==` 与 `equals` 的区别,强调了基本类型和引用类型的比较方式;接着,对比了 `String`、`StringBuilder` 和 `StringBuffer` 的特性,包括线程安全性和性能差异;最后,讲解了 Java 异常机制,包括自定义异常的实现以及常见非检查异常的类型。这些内容对理解 Java 面向对象编程和实际开发问题解决具有重要意义。
56 15
|
5月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
167 2
|
3月前
|
Java 程序员
Java社招面试中的高频考点:Callable、Future与FutureTask详解
大家好,我是小米。本文主要讲解Java多线程编程中的三个重要概念:Callable、Future和FutureTask。它们在实际开发中帮助我们更灵活、高效地处理多线程任务,尤其适合社招面试场景。通过 Callable 可以定义有返回值且可能抛出异常的任务;Future 用于获取任务结果并提供取消和检查状态的功能;FutureTask 则结合了两者的优势,既可执行任务又可获取结果。掌握这些知识不仅能提升你的编程能力,还能让你在面试中脱颖而出。文中结合实例详细介绍了这三个概念的使用方法及其区别与联系。希望对大家有所帮助!
236 60
|
2月前
|
Java 程序员 开发者
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
184 14
|
2月前
|
安全 Java 程序员
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
79 13
|
3月前
|
算法 安全 Java
Java线程调度揭秘:从算法到策略,让你面试稳赢!
在社招面试中,关于线程调度和同步的相关问题常常让人感到棘手。今天,我们将深入解析Java中的线程调度算法、调度策略,探讨线程调度器、时间分片的工作原理,并带你了解常见的线程同步方法。让我们一起破解这些面试难题,提升你的Java并发编程技能!
138 16
|
3月前
|
Java 程序员 调度
Java 高级面试技巧:yield() 与 sleep() 方法的使用场景和区别
本文详细解析了 Java 中 `Thread` 类的 `yield()` 和 `sleep()` 方法,解释了它们的作用、区别及为什么是静态方法。`yield()` 让当前线程释放 CPU 时间片,给其他同等优先级线程运行机会,但不保证暂停;`sleep()` 则让线程进入休眠状态,指定时间后继续执行。两者都是静态方法,因为它们影响线程调度机制而非单一线程行为。这些知识点在面试中常被提及,掌握它们有助于更好地应对多线程编程问题。
150 9
|
3月前
|
安全 Java 程序员
Java面试必问!run() 和 start() 方法到底有啥区别?
在多线程编程中,run和 start方法常常让开发者感到困惑。为什么调用 start 才能启动线程,而直接调用 run只是普通方法调用?这篇文章将通过一个简单的例子,详细解析这两者的区别,帮助你在面试中脱颖而出,理解多线程背后的机制和原理。
118 12
|
3月前
|
监控 Dubbo Java
Java Dubbo 面试题
Java Dubbo相关基础面试题
下一篇
oss创建bucket