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

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
云数据库 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)640.png


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

select employee.name from test employee

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

where manager.id=employee.manager);


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

640.png


欲得到如下结果:

640.png

答: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
目录
相关文章
|
9天前
|
NoSQL Java API
在Java环境下如何进行Redis数据库的操作
总的来说,使用Jedis在Java环境下进行Redis数据库的操作,是一种简单而高效的方法。只需要几行代码,就可以实现复杂的数据操作。同时,Jedis的API设计得非常直观,即使是初学者,也可以快速上手。
166 93
|
1月前
|
前端开发 JavaScript Java
[Java计算机毕设]基于ssm的OA办公管理系统的设计与实现,附源码+数据库+论文+开题,包安装调试
OA办公管理系统是一款基于Java和SSM框架开发的B/S架构应用,适用于Windows系统。项目包含管理员、项目管理人员和普通用户三种角色,分别负责系统管理、请假审批、图书借阅等日常办公事务。系统使用Vue、HTML、JavaScript、CSS和LayUI构建前端,后端采用SSM框架,数据库为MySQL,共24张表。提供完整演示视频和详细文档截图,支持远程安装调试,确保顺利运行。
101 17
|
2月前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
129 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
2月前
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
140 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
2月前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
251 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
3月前
|
SQL Java 关系型数据库
使用 JDBC 实现 Java 数据库操作
JDBC(Java Database Connectivity)是 Java 提供的数据库访问技术,允许通过 SQL 语句与数据库交互。本文详细介绍了 JDBC 的使用方法,包括环境准备、编程步骤和完整示例。
330 7
|
3月前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
309 6
|
3月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
148 2
|
4月前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
5月前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
645 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.

热门文章

最新文章