oricle测试2

1、选择题(10道小题,每小题1分,共10分)
填空题(20空,每空1分,共20分)
1.在如下的XML中school有几个子元素( C)

briup

A.1个 B.2个 C.3个 D.4个
2.下列哪项的说法是错误?(C )
A.PreparedStatement中execute()的返回值为是否成功执行的boolean值
B.PreparedStatement中executeQuery()的返回值为ResultSet对象
C.PreparedStatement中executeUpdate()的返回值为是否成功执行的boolean值 //int
D.PreparedStatement中addBatch()是没有返回值的
3.在数据库中可以创建和删除表、视图、索引,可以修改表。这是因为数据库管理系统提供了( A)
A.数据定义功能
B.数据操纵功能
C.数据维护功能
D.数据控制功能
4.下列哪项不是DML语句?(A )
A.alter B.insert C.update D.delete
5.关于类型定义Number(9,2)说法正确的有(B )
A.整数部分9位,小数部分2位,共11位
B.整数部分7位,小数部分2位,共9位
C.整数部分6位,小数点一位,小数部分2位,共9位
D.以上说法均不正确
6.查询所有的员工基本信息,包括没有部门的员工,下列哪项能是正确的sql?(B )
A. Select * from s_emp,s_dept where s_emp.dept_id=s_dept.id;
B. Select * from s_emp left outer join s_dept on s_emp.dept_id=s_dept.id;
C. Select * from s_emp right outer join s_dept on s_emp.dept_id=s_dept.id
D. 以上都不对。
7.下列哪项不是分组函数?(C )
A.avg() B.max() C.mod() D.count()
8.关于rownum,下列哪项是正确的sql?(D )
A.select * from s_emp where rownum=2;
B.select * from s_emp where rownum>2;
C.select * from s_emp where rownum<=2;
D.select * from s_emp where rownum<2;
9.下列哪项是连接Oracle10g数据库正确的URL?(C )
A. jdbc:oracle:@127.0.0.1:thin:xe
B. jdbc:oracle:@127.0.0.1:thin:1521:xe
C. jdbc:oracle: thin:@localhost:1521:xe
D. oracle:jdbc:@loalhost:thin:1521:xe
10.下列哪项能正确创建一个PreparedStatement对象(B)
A.createPrepareStatement() B.prepareStatement()
C.createPreparedStatement() D.preparedStatement()

2、填空题
1.在数据库中,分配权限和回收权限的关键字分别为 grant 和 revoke
2.事务的四个特性 原子性,一致性,持久性,隔离性
3.oracle数据库字符函数的substr(‘helloworld’,3,4)操作的结果是 llow
4.oracle通配符:“_”代表 单个占位符 。“%”代表 0到多个占位符 .通过 escape 关键字将字符转义
5.oracle查看student表结构的语句是 desc student
6.聚合函数能够出现的位置 select ,having ,order by
7.select sysdate - 1/2 from dual的查询结果表示的含义是什么? 获取12小时前系统时间
8.java8新增的接口方法 静态方法, 默认方法
9. 使用SELECT语句显示当前系统时间,显示格式为如:2018-01-09 22:22:22 18
10.oracle中如何删除student表中的所有数据,并且事务自动提交() truncate table student
oracle中查看当前用户下有哪些表的命令是 select table_name from user_tables
3、简答题
1.已知函数值接口,使用lambda表达式实现函数式接口中找出字符串"i"在大字符串"briup"出现的位置。
@FunctionalInterface
interface Test {
public int position(String s);
}

public class Demo1 {
public static void main(String[] args) {
Test t = s-> “briup”.indexOf(s);
System.out.println(t.position(“i”));
}
}
2.jdk提供的四个常用函数式接口以及作用。
Predicate 对某种数据类型进行判断 结果返回一个Boolean值 test(T t)
Consumer 消费型的接口,通过传入参数,然后输出值 accept(T t)
Supplier 用来获取一个泛型参数指定类型的对象数据 get()
Function 根据一个类型的数据得到另一个类型的数据 apply(T t,F f)
3.DOM解析和SAX解析的区别。
DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树

  • 优点:操作方便,可以对文档进行CRUD的所有操作
  • 缺点:占内存
    SAX:逐行读取,基于事件驱动的。
  • 优点:不占内存。
  • 缺点:只能读取,不能增删改
    4.如何在xml中原样显示 if(a<b && a>c){}
<![CDATA[ if(a

5.请简述什么是DML、DDL,并分别至少列举三个。
DDL 数据定义语言 create drop alter
DML 数据操作语言 insert update delete
6.sql语句的执行顺序
select dept_id,avg(salary)
from s_emp
where rownum<10
group by dept_id
having avg(salary)>1000
order by dept_id;
顺序:

  1. from子句,组装来自表的数据,有可能是多张表
  2. where子句,基于指定的条件对记录行进行筛选
  3. group by子句,将数据划分为多个分组
  4. avg(salary) 使用聚合函数对没个小组进行计算
  5. having子句,进行条件筛选,这里可以使用聚合函数的计算结果
  6. 计算所有的运算表达式,主要是select部分
  7. order by子句,对结果集进行排序
    7.给student插入一行数据,主键自增。(id,name,age)
    create sequence stu_seq
    insert into student(id,name,age) values (stu_seq.nextval,‘tom’,18);
    8.简单描述第一范式,第二范式,第三范式。
    第一范式 一个表中,每个列里面的值是不能再分割的。
    第二范式 是在满足第一范式的基础上,表中的非主键列都必须依赖于主键列。
    第三范式 是在满足第二范式的基础上,表中的非主键列都必须直接依赖于主键列,而不能间接的依赖,
    也就是不能出现依赖传递。
    9.请简述JDBC编程步骤
    1.注册驱动
    2.获取数据库连接
    3.创建statement类型或者子类型对象
    4.执行sql
    5.处理结果(如果需要的话,一般查询语句必须要处理)
    6.关闭资源。
    10.请简述Statement与PreparedStatement的区别。
    Statement用于执行静态sql语句,在执行时,必须指定一个事先准备好的sql语句。
    PrepareStatement是预编译的sql语句对象,sql语句被预编译并保存在对象中。被封装的sql语句代
    表某一类操作,语句中可以包含动态参数“?”,在执行时可以为“?”动态设置参数值。
    使用PrepareStatement对象执行sql时,sql被数据库进行解析和编译,然后被放到命令缓冲区,每当
    执行同一个PrepareStatement对象时,它就会被解析一次,但不会被再次编译。在缓冲区可以发现预编译的
    命令,并且可以重用。
    PrepareStatement可以减少编译次数提高数据库性能。
    PrepareStatment安全 预防sql注入。

4、程序设计
1.有如下表 (该题有10小题,每题2分,共20分)
建表语句
create table employees(
employee_id number(6),
first_name varchar2(20),
last_name varchar2(25),
email varchar2(25),
phone_number varchar2(20),
hire_date date,
job_id varchar2(20),
salary number(8,2),
commission_pct number(2,2),
manager_id number(6),
department_id number(6)
);
create table jobs(
job_id varchar2(10),
job_title varchar2(20),
min_salary number(6),

max_salary number(6)
);
create table departments(
department_id number(4),
name varchar2(30),
manager_id number(6),
location_id number(4)
);
create table locations(
location_id number(4),
street_address varchar2(40),
postal_code varchar2(10),
city varchar2(30),
state_province varchar2(25),
country_id char(2)
);
create table job_grades(
grade_level varchar2(3),
lowest_sal number,
highest_sal number
);

  1. 查询每个月倒数第 2 天入职的员工的信息.
    select last_name, hire_date
    from employees
    where hire_date = last_day(hire_date) – 1
  2. 查询出 last_name 为 ‘Chen’ 的 manager 的信息.
    select m.*
    from employees e, employees m
    where e.manager_id = m.employee_id and e.last_name= ‘Chen’
  3. 查询平均工资最高的 job 信息
    SELECT *

FROM
jobs
WHERE
job_id = (
SELECT
job_id
FROM
employees
GROUP BY
job_id
HAVING
avg( salary ) = ( SELECT max( avg( salary ) ) FROM employees GROUP BY job_id
)
)
4.查询平均工资最低的部门信息和该部门的平均工资
SELECT
d.*,
( SELECT avg( salary ) FROM employees WHERE department_id = d.department_id
)
FROM
departments d
WHERE
d.department_id = (
SELECT
department_id
FROM
employees
GROUP BY
department_id
HAVING
avg( salary ) = ( SELECT min( avg( salary ) ) FROM employees GROUP BY
department_id )
)
5.查询 1999 年来公司的人所有员工的最高工资的那个员工的信息.
1). 查询出 1999 年来公司的所有的员工的 salary
SELECT
salary
FROM
employees
WHERE
to_char( hire_date, ‘yyyy’ ) = ‘1999’
2). 查询出 1) 对应的结果的最大值
SELECT
max( salary )
FROM
employees
WHERE
to_char( hire_date, ‘yyyy’ ) = ‘1999’
3). 查询工资等于 2) 对应的结果且 1999 年入职的员工信息
SELECT
*
FROM
employees
WHERE
to_char( hire_date, ‘yyyy’ ) = ‘1999’
AND salary = ( SELECT max( salary ) FROM employees WHERE to_char( hire_date,
‘yyyy’ ) = ‘1999’ )

6.返回其它部门中比 job_id 为‘IT_PROG’部门所有工资都低的员工的员工号、姓名、job_id 以及
salary
SELECT
employee_id,
last_name,
job_id,
salary
FROM
employees
WHERE
salary < ALL ( SELECT salary FROM employees WHERE job_id = ‘IT_PROG’ )
AND job_id <> ‘IT_PROG’;
7.查询平均工资最高的部门的 manager 的详细信息: last_name, department_id, email,
salary
1). 各个部门中, 查询平均工资最高的平均工资是多少
SELECT
max( avg( salary ) )
FROM
employees
GROUP BY
department_id
2). 各个部门中, 平均工资等于 1) 的那个部门的部门号是多少
SELECT
department_id
FROM
employees
GROUP BY
department_id
HAVING
avg( salary ) = (
SELECT
max( avg( salary ) )
FROM
employees
GROUP BY
department_id
)
3). 查询出 2) 对应的部门的 manager_id
SELECT
manager_id
FROM
departments
WHERE
department_id = (
SELECT
department_id
FROM
employees
GROUP BY
department_id
HAVING
avg( salary ) = ( SELECT max( avg( salary ) ) FROM employees GROUP BY
department_id )
)
4). 查询出 employee_id 为 3) 查询的 manager_id 的员工的
last_name,
department_id,

email,
salary SELECT
last_name,
department_id,
email,
salary
FROM
employees
WHERE
employee_id = (
SELECT
manager_id
FROM
departments
WHERE
department_id = (
SELECT
department_id
FROM
employees
GROUP BY
department_id
HAVING
avg( salary ) = ( SELECT max( avg( salary ) ) FROM employees GROUP
BY department_id )
)
)
8.各个部门中 最高工资中最低的那个部门的 最低工资是多少
1). 查询出各个部门的最高工资
SELECT
max( salary )
FROM
employees
GROUP BY
department_id
2). 查询出 1) 对应的查询结果的最低值: 各个部门中最低的最高工
资(无法查询对应的 department_id)
SELECT
min( max( salary ) )
FROM
employees
GROUP BY
department_id
3). 查询出 2) 所对应的部门 id 是多少: 各个部门中最高工资等于2) 的那个部门的 id
SELECT
department_id
FROM
employees
GROUP BY
department_id
HAVING
max( salary ) = ( SELECT min( max( salary ) ) FROM employees GROUP BY
department_id )
4). 查询出 3) 所在部门的最低工资
SELECT
min( salary )
FROM
employees

2.已有类com.briup.Student (该题有两个小共10分)
(1)通过dom4j解析xml文件,获取相应的值。 (4分)
(2) (6分)
WHERE
department_id = (
SELECT
department_id
FROM
employees
GROUP BY
department_id
HAVING
max( salary ) = ( SELECT min( max( salary ) ) FROM employees GROUP BY
department_id )
)
9.选择所有没有管理者的员工的 last_name
SELECT
last_name
FROM
employees e1
WHERE
NOT EXISTS ( SELECT ‘A’ FROM employees e2 WHERE e1.manager_id =
e2.employee_id )
10.显式员工的 employee_id,last_name 和 location。其中,若员工
SELECT
employee_id,
last_name,
( CASE department_id WHEN ( SELECT department_id FROM departments WHERE
location_id = 1800 ) THEN ‘Canada’ ELSE ‘USA’ END ) location
FROM
employees;

class Student {
private String name;
private String age;
public Student(){}
}
1
2
3
4
5

<?xml version = '1.0'?> tom 18

document = new SAXReader().read( path);
Element rootElement = document.getRootElement();
List elements = rootElement.elements();
for (Element e:elements) {
String id = e.attribute(“id”).getValue();
String className = e.attribute(“class”).getValue();
}

自己创建一个工厂BeanFactory,用来实例化对象配置文件中配置好的bean(使用Map结构)。
循环beans中的bean标签,根据class属性创建对象,然后将这个对象放在工厂中(将键值对(id,calss对
象)放入工厂中),有多少bean标签就会循环创建多少个对象。
编写getBean方法,参数为bean的id,调用该方法获取工厂的实例对象。
继续根据获取出来的property的name属性的值通反射调用该方法,比如setName,将标签内容作为参数值
10.
public class BeanFactory {
private Map<String,Object> map = new HashMap<>();
public static void main(String[] args) {
BeanFactory beanFactory = new BeanFactory();
beanFactory.initBeanFactory(“src/test/three/student.xml”);
Object student = beanFactory.getObject(“student”);
System.out.println(student);
}
public void initBeanFactory(String path){
Document document = null;
try {
document = new SAXReader().read( path);
Element rootElement = document.getRootElement();
List elements = rootElement.elements();
//遍历 获取id 和 class属性
for (Element e:elements) {
String id = e.attribute(“id”).getValue();
String className = e.attribute(“class”).getValue();
//获取属性
String methodName=null;
String methodParm=null;
//反射创建对象
Class<?> clazz = Class.forName(className);
Object o = o = clazz.newInstance();
for (Element e1: e.elements()) {
//解析下的property节点
Attribute nameAttr = e1.attribute(“name”);
methodName = nameAttr.getValue();
methodParm = e1.getText();
//创建该对象,传递属性
//Object o = createObject(className,methodName,methodParm);
//name
methodName =
“set”+methodName.substring(0,1).toUpperCase()+methodName.substring(1);
//反射调用方法
Method method = clazz.getMethod(methodName,
methodParm.getClass());
method.invoke(o,methodParm);
}
//存入工厂中
map.put(id,o);
}
} catch (Exception e) {
e.printStackTrace();
}
}

//根据id获取从工厂中取出对象
public Object getObject(String id){
return map.get(id);
}
}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值