From 7e9e258ddebf35416c3d0b648ecb35b0deea0c95 Mon Sep 17 00:00:00 2001 From: 423A35C7 <609514299@qq.com> Date: Sat, 30 Nov 2024 22:05:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E5=8E=9F=E7=90=86=E4=B8=8E=E5=AE=9E=E8=B7=B5=E2=80=94=E2=80=94?= =?UTF-8?q?=E7=AC=AC=E5=85=AB=E6=AC=A1=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 数据库系统原理与实践/平时作业/第八次作业.tex | 227 +++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 数据库系统原理与实践/平时作业/第八次作业.tex diff --git a/数据库系统原理与实践/平时作业/第八次作业.tex b/数据库系统原理与实践/平时作业/第八次作业.tex new file mode 100644 index 0000000..df66196 --- /dev/null +++ b/数据库系统原理与实践/平时作业/第八次作业.tex @@ -0,0 +1,227 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} + +\begin{document} +\setcounter{chapter}{7} +\chapter{第八次作业} +\begin{enumerate} + \item \choice[4]{(单选题, 7.6分) MySQL Connector/J是一个JDBC( )驱动 + A + Type 1 + + B + Type 2 + + C + Type 3 + + D + Type 4 + + }{4} + \item \choice[2]{(单选题, 7.8分) 使用Class类的forName()加载驱动程序需要捕获( )异常。 + A + SQLException + + B + ClassNotFoundException + + C + IOException + + D + DBException + + }{2} + \item \choice[2]{(单选题, 7.8分) 使用Connection接口的( )方法可以建立一个PreparedStatement对象 + A + createPrepareStatement() + + B + createPreparedStatement() + + C + PrepareStatement() + + D + PreparedStatement() + + }{3} + \item \choice[2]{ (单选题, 7.8分) 在JDBC编程中执行下列SQL语句"SELECT id,name FROM employee",获取结果集rs的第1列数据的代码是 + A + rs.getString(1) + + B + rs.getString(2) + + C + rs.getString(name) + + D + rs.getString(id) + + }{1} + \item \choice[2]{(单选题, 7.8分) 如果要创建带参数的SQL查询语句,应该使用( )对象 + A + Statement + + B + PreparedStatement + + C + PrepareStatment + + D + CallableStatement + + }{2} + \item \choice[1]{ (单选题, 7.8分) + 下面描述中不属于连接池的功能的是 + + + + A + 可以缓解连接频繁的关闭和创建所造成的系统性能下降 + + B + 可以限制客户端的连接数量 + + C + 可以大幅度提高查询语句的执行效率 + + D + 可以提高系统的伸缩性 + + }{3} + \item \choice[1]{(单选题, 7.8分) 下面关于PreparedStatement的说法错误的是( ) + A + PreparedStatement继承Statement + + B + PreparedStatement可以防止SQL注入,更加安全 + + C + PreparedStatement不能用于批量更新操作 + + D + PreparedStatement可以存储预编译的Statement,从而提升执行效率 + + }{3} + \item \choice[1]{(单选题, 7.8分) 在使用JDBC连接数据库时,以下哪个选项描述了正确的连接流程? + A + 建立数据库连接 -> 创建statement对象 -> 执行SQL语句 -> 处理结果集 -> 加载JDBC驱动程序 + + B + 加载JDBC驱动程序 -> 建立数据库连接 -> 创建statement对象 -> 执行SQL语句 -> 处理结果集 + + C + 创建statement对象 -> 建立数据库连接 -> 执行SQL语句 -> 处理结果集 -> 加载JDBC驱动程序 + + D + 加载JDBC驱动程序 -> 建立数据库连接 -> 处理结果集 -> 创建statement对象 -> 执行SQL语句 + + }{2} + \item (多选题, 7.8分) 下面哪个JDBC方法可能会改变数据库中的已有数据? + \begin{tasks}[](2) + \task executeQuery() + \task \fbox{executeUpdate()} + \task executeInsert() + \task \fbox{executeBatch()} + \end{tasks} + + \questionandanswer[]{ + (简答题, 7.8分) + 加载JDBC驱动,使用Java连接university数据库,查询instructor表中salary大于70000的教师信息,按照dept_name的升序排列后用System.out.println()输出,各列数据之间用|分隔。 + + ID|name|dept_name|salary + + 将编写的Java类代码贴在下方输入框中,并给出输出结果。 + }{} + {\kaishu + \inputminted[frame=single]{java}{../实践作业/第八次作业/test-mysql/src/Question10.java} + + 以下是输出结果: + + \begin{minted}[frame=single]{text} +连接数据库... + 实例化Statement对象... +76766|Crick|Biology|72000.0 +45565|Katz|Comp. Sci.|75000.0 +83821|Brandt|Comp. Sci.|92000.0 +98345|Kim|Elec. Eng.|80000.0 +12121|Wu|Finance|90000.0 +76543|Singh|Finance|80000.0 +22222|Einstein|Physics|95000.0 +33456|Gold|Physics|87000.0 +Goodbye! + \end{minted} + } + \questionandanswer[]{ + (简答题, 7.8分) +查阅资料学习JDBC CallableStatements执行存储过程的方法:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-usagenotes-statements-callable.html + +(1)在Univerisity中编写一个带输入参数和输出参数的存储过程demoSp,功能自定,给出存储过程定义并说明自定义的功能。 + +(2)编写Java代码调用存储过程,指定输入参数,获取输出参数后输出。给出调用存储过程的关键代码并给出输出结果。 + }{} + {\kaishu + 存储过程的作用为将输入的变量 +1。 + + \inputminted[frame=single]{java}{../实践作业/第八次作业/test-mysql/src/Question11.java} + + 以下是输出结果: + + \begin{minted}[frame=single]{text} +连接数据库... +实例化Statement对象... +调用存储过程,作用为将输入的变量+1: +输入变量: +0 +调用结果: +1 +Goodbye! + \end{minted} + } + \pagebreak[4] + \questionandanswer[]{ + (简答题, 7.8分) + 考虑两个都具有属性X的实体集A和B (其中另外的名称与此问题无关)。 + + a.如果两个X完全不相关,那么应该如何改进设计呢? + + }{ + 应该把两个X属性改名,以便区分这两个不相关的属性。 + } + \questionandanswer[-]{ + b.如果这两个X代表相同的性质,并且它同时适用于A和B,那么应该如何改进设计呢?考虑三种子情况: + + · X是A的主码,但不是B的主码。 + }{ + 可以将X作为B的外码,参考A的主码。 + + \mintinline{SQL}{alter table B add foreign key (X) references A(X);} + } + \questionandanswer[-]{ + · X是A和B的主码。 + }{ + 在满足某些范式的情况下,可以把A和B合并起来,仍使用X作为主码。 + } + \questionandanswer[-]{ + · X不是A或B的主码。 + }{ + 将A和B概化出一个实体集,将X作为此实体集的属性,并将X从A和B中去除。 + } + \questionandanswer[]{ + (简答题, 7.8分) +考虑实体集A和B之间的多对一联系R。假设由R生成的关系和由A生成的关系合并了。在SQL中,参与外码约束的属性可以为空。请解释如何使用SQL中的not null约束来强制实施A在R中的全部参与约束。 + }{} + {\kaishu + 假设联系R的属性名为X,那么可以添加外键约束和非空约束如下: + \begin{minted}{SQL} + alter table A add foreign key (X) references B(X); + alter table A modify X not null; + alter table B modify X not null; + \end{minted} + } +\end{enumerate} +\end{document} \ No newline at end of file