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

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



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
Java 关系型数据库 数据库连接
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
47 8
|
3月前
|
Java 数据库连接 API
JDBC:Java数据库连接的“黑科技”大揭秘
JDBC:Java数据库连接的“黑科技”大揭秘
38 7
|
3月前
|
SQL Java 数据库连接
为何JDBC是Java开发者的“心头好”?原因竟然这么简单!
为何JDBC是Java开发者的“心头好”?原因竟然这么简单!
40 3
|
1月前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
46 15
|
1月前
|
SQL Java 数据库
Springboot+spring-boot-starter-data-jdbc实现数据库的操作
本文介绍了如何使用Spring Boot的spring-boot-starter-data-jdbc依赖来操作数据库,包括添加依赖、配置数据库信息和编写基于JdbcTemplate的数据访问代码。
56 2
|
1月前
|
Java 关系型数据库 MySQL
数据库的连接用Java
本文介绍了如何使用Java连接MySQL数据库,包括注册JDBC驱动、创建数据库连接URL、设置数据库用户和密码、建立连接以及关闭连接的完整代码示例。
29 0
数据库的连接用Java
|
1月前
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
132 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
1月前
|
SQL druid Java
JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO
JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO
31 0
|
1月前
|
SQL Java 数据库连接
如何在 Java 脚本中有效地使用 JDBC
如何在 Java 脚本中有效地使用 JDBC
16 0
|
3月前
|
SQL Java 关系型数据库
探索Java数据库连接的奥秘:JDBC技术全攻略
探索Java数据库连接的奥秘:JDBC技术全攻略
58 8