杰普软件数据库测试题及答案Word文档下载推荐.docx
《杰普软件数据库测试题及答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《杰普软件数据库测试题及答案Word文档下载推荐.docx(9页珍藏版)》请在冰豆网上搜索。
c).数据独立性会提高
d).增加数据冗余度
7.使用sql查询时,使用where子句指出的是(B)
a)查询目标b)
查询条件
c)查询视图
d)查询结果
8.在Oracle中,有一个教师表teacher的结构如下:
ID
NUMBER(5)
NAME
VARCHAR2(25)
EMAIL
VARCHAR2(50)
下面哪个语句显示没有Email地址的教师姓名(C)
a).SELECT
name
FROM
teacher
WHERE
email
=
NULL;
b).SELECT
<
>
c).SELECT
IS
d).SELECT
NOT
9.9.典型的jdbc程序按________顺序编写(DBECFA)
A.释放资源
B.获取与数据库的物理连接
C.执行Sql语句
D.注册jdbcdriver
E.创建不同类型的statement
F.如果有结果集,处理结果集
10.在Oracle中,下面哪条语句当COMM字段为空时显示0,不为空时显示COMM的值_____A______
a)SELECT
ename,
NVL(comm,
0)
emp;
b)SELECT
NULL(comm,
c)SELECT
NULLIF(comm,
d)SELECT
DECODE(comm,
NULL,
11.在Oracle中,有一个名为seq的序列对象,以下语句能返回序列值但不会引起序列值增加的是____C_______
a).select
seq.ROWNUM
b).select
seq.ROWID
c).select
seq.CURRVAL
d).select
seq.NEXTVAL
12.有表一的查询结果如下,该表为学生成绩表:
select
id,grade
student_grade
GRADE
--------
-----------
1
50
2
40
3
70
4
80
5
30
6
90
表二为补考成绩表
student_makeup
60
现在通过如下语句把补考成绩更新到成绩表中,并提交:
update
s
set
s.grade
(select
t.grade
t
where
s.id=t.id);
commit;
请问之后查询:
id
3;
结果为_________C_____
A.0
B.70
C.Null
D.以上都不对
13.在Oracle中,可用于提取日期时间特定字符串(如年、月、日、时、分、秒)的函数有______B_______
a).DATEPART
b).TO_CHAR
c).TRUNC
d).TIMPSTAMP
14.MyBatis指定配置文件的根元素使用的是(B
)。
a).<
sqlMapConfig>
b).<
configuration>
c).<
setting>
d).<
environments>
15.SQL语言按照用途可以分为三类,不包括下面选项中的(C)。
(A)DML(B)DCL(C)DQL(D)DDL
在sql语法中,SELECT语句的完整语法较复杂,但至少包括的部分(_16_B),使用关键字(_17_A)可以把行屏蔽,如果在SELECT语句中使用组函数时,可以在后面使用(_18_A)。
(16)A、SELECT,INTOB、SELECT,FROMC、SELECT,GROUPD、SELECT
(17)A、DISTINCTB、UNIONC、ALLD、TOP
(18)A、GROUPBYB、COMPUTEBYC、HAVINGD、COMPUTE
19.下列关于PreparedStatement对象的说法错误的是__C_________
a)PreparedStatement对象继承了Statement对象
b)PreparedStatement可以有效的防止sql注入
c)PreparedStatement不能用于批量更新操作
d)PreparedStatement可以存储预编译的Sql,从而提升执行效率
20.
下面select语句的执行顺序正确的是___D____
group
by
order
having
by
二.填空题(1题2分,其余1分)
1.使用SELECT语句显示当前系统时间,显示格式为如:
2009-03-2520:
13:
43
selectto_char(sysdate,’yyyy-mm-ddhh24:
mi:
ss’)fromdual;
2.数据库事务的特性___原子性______、___一致性________、_____隔离性_______、____持久性______
3.执行脚本estore.sql文件的两种方式_____@________和___start______。
4.请写出两种清空表order中数据的方法____delete_________和_____truncate_______。
哪一种方式是彻底删除数据____truncate________
5.JDBC编程中负责事务管理的类是____Connection______;
6.设置name列显示长度为20个字符__colnameformata20________,设置salary列显示格式为$23,200.00
_colsalaryformat$99,999.00______。
7.oracle通配符:
“
_
”
代表:
_通配一个字符______;
%
代表_通配0到多个字符_______,通过____escape______关键字将字符转义。
以练习的s_emp表,写出查询last_name第二个字符为"
g"
的用户信息语句
selectlast_namefroms_empwherelast_namelike'
_g%'
8.oracle数据库字符函数的substr(‘hello
world’,3,4)操作的结果是:
___llo____
9.在mybatis的配置文件中,我们使用__typeAliases_____标签给类取别名
三.简答题(每题5分,共25分):
1.请分别简述xml中原生的解析方式有哪两种,并且各自特点是什么。
DOM和SAX的不同:
1.DOM是基于内存的,不管文件有多大,都会将所有的内容预先装载到内存中。
从而消耗很大的内存空间。
而SAX是基于事件的。
当某个事件被触发时,才获取相应的XML的部分数据,从而不管XML文件有多大,都只占用了少量的内存空间。
2.DOM可以读取XML也可以向XML文件中插入数据,而SAX却只能对XML进行读取,而不能在文件中插入数据。
这也是SAX的一个缺点。
3.SAX的另一个缺点:
DOM我们可以指定要访问的元素进行随机访问,而SAX则不行。
SAX是从文档开始执行遍历的。
并且只能遍历一次。
也就是说我们不能随机的访问XML文件,只能从头到尾的将XML文件遍历一次(当然也可以中间截断遍历)。
2.MyBatis实现一对一有几种方式?
具体怎么操作的?
(1)使用嵌套结果ResultMap实现一对一关系映射,我们可以使用一个嵌套结果ResultMap方式来获取主表及其关联表信息,使用<
association>
引用另外的在同一个XML文件中定义的<
resultMap>
。
(2)通使用嵌套select查询来获取主表及其关联表信息,此时<
引用另外的在同一个XML文件中定义的select查询语句。
3.以练习的S_emp表为基表查看薪资高于Chang经理薪资的员工信息
select*froms_empwheresalary>
(
selectsalary
froms_emp
whereid=(
selectmanager_id
froms_emp
wherelast_name='
Chang'
)
);
4.查询平均工资大于1200的部门,并显示这些部门的部门编号,名字,和平均工资
selectsd.id,sd.name,avg(salary)
froms_empse,s_deptsd
wherese.dept_id=sd.id
groupbysd.id,sd.name
havingavg(salary)>
1200;
selecta.dept_id,d.id,a.sal,d.name
from(selectavg(salary)sal,dept_id
groupbydept_id
havingavg(salary)>
1200)a,s_deptd
wherea.dept_id=d.id
5.请简述Statement对象和PreparedStatement对象的关系和区别。
1、关系
PreparedStatement继承Statement,他们属于父与子的关系。
使用上来说Statement使用的地方都可以换成PreparedStatement。
2、安全性
Statement的直接执行SQL语句,无法防止SQL注入问题。
PreparedStatement可以使用占位符,可以防止SQL注入问题。
3、性能
PreparedStatement:
1)addBatch()将一组参数添加到PreparedStatement对象内部。
2)executeBatch()将一批参数提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。
Statement:
1)addBatch(Stringsql)方法会在批处理缓存中加入一条sql语句。
2)executeBatch()执行批处理缓存中的所有sql语句。
从第一次执行的角度:
PreparedStatement由于占位符的使用,第一次执行需要很多额外的工作,例如占位符转换等等,这些都需要消耗一定的事件和资源。
而Statement直接执行相对来说效率要高、消耗要少一些。
从多次执行的角度:
PreparedStatement由于使用占位符进行预编译时,保存的执行代码被缓存,下次调用的时候就可以不再被编译而可以直接执行。
而Statement即使执行一样的操作,由于操作数据不同,所以执行语句也需要再次编译。
四.编程题
1.数据库中有Student表,以下为建表语句。
请将学生A的信息保存入数据库中,要求使用JDBC技术,采用两种方式(Statement,PreparedStatement)将此记录插入表中。
学生A信息为:
学号:
001;
姓名:
张三;
生日:
2012年1月12号。
create
table
Student_jdbc(
number(3)
primary
key,
varchar2(20),
birthday
date
Class.forName("
oracle.jdbc.driver.OracleDriver"
Connectionconnection=DriverManager.getConnection("
jdbc:
oracle:
thin:
@localhost:
1521:
xe"
"
briup16"
/*Stringsql="
insertintoStudent_jdbcvalues(001,'
张三'
'
12-1月-2012'
)"
;
Statementstatement=connection.createStatement();
statement.execute(sql);
if(statement!
=null){
statement.close();
}*/
insertintoStudent_jdbcvalues(?
?
PreparedStatementpreparedStatement=connection.prepareStatement(sql);
preparedStatement.setInt(1,001);
preparedStatement.setString(2,"
张三"
preparedStatement.setDate(3,newDate(newSimpleDateFormat("
yyyy-mm-dd"
).parse("
2012-01-12"
).getTime()));
preparedStatement.execute();
if(preparedStatement!
preparedStatement.close();
if(connection!
connection.close();
}
2.现有用户表,以下为建表语句
createtablet_user(
idnumberprimarykey,
namevarchar(20)notnull,
agenumber
(2),
birthdaydate)
用户类(com.briup.mybatis.User)的属性如下
privateintuserid;
privateintage;
privateStringname;
privateDatebirthday;
映射文件内容为:
mappernamespace="
com.briup.mybatis.mapper.UserMapper"
/mapper>
(1)向用户表中插入用户(写出:
insert标签,mapper接口方法)
insertid="
insertUser"
parameterType="
User"
insertintot_user(id,name,age,birthday)values(#{userid},#{name},#{age},#{birthday})
/insert>
publicvoidinsertUser(Useruser);
(2)查询id为001的用户的编号,姓名,年龄和生日,并将结果封装成User对象(xml中的select标签,mapper接口方法,使用命名空间、接口两种方式的测试代码)
Xml
selectid="
findUserById"
int"
resultType="
>
selectidasuserid,name,age,birthday
fromt_user
whereid=#{id}
/select>
Mapper
publicUserfindUserById(intid);
测试代码一
InputStreaminputStream=Resources.getResourceAsStream("
com/briup/mybatis/mybatis-config.xml"
SqlSessionFactoryfactory=newSqlSessionFactoryBuilder().build(inputStream);
SqlSessionsession=factory.openSession();
ObjectselectOne=session.selectOne("
com.briup.mybatis.mapper.UserMapper.findUserById"
001);
测试代码二
UserMappermapper=session.getMapper(UserMapper.class);
UserfindUserById=mapper.findUserById(001);