SchoolWork-LaTeX/数据库系统原理与实践/平时作业/第八次作业.tex

227 lines
6.5 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\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}