数据库理论3

5.2

写一个使用JDBC元数据特性的Java函数,该函数用ResultSet作为输入参数,并且把结果输出为合适的名字作为列名的表格形式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void (ResultSet Search_result){
ResultSet result = Search_result;
ResultSetMetaData metadata = result.getMetaData();
int ncols = metadata.getColumnCount();


for(int i = 1; i <= ncols; i++) {
System.out.print(metadata.getColumnName(i) + " ");
}
System.out.println();

// 输出数据结果
for(;result.next();) {
for(int i = 1; i <= ncols; i++) {
System.out.print(result.getString( metadata.getColumnName(i) + " "));
}
System.out.println();
}
}

5.4

说明如何用触发器来保证约束“一位教师不可能在一个学期的同一个时间段在不同的教室里教课”。(要知道,对teachers或者section的改变都可能使该约束被破坏)

当section发生变化时,只需查看该老师在同一时间是否同时出现在两个不同的课室中即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
create trigger teacher_check after insert on section
for each row
BEGIN
if count (
select room_number
from section natural join teachers
where year = new.year
and sec_id = new.sec_id
and ID = new.ID
and semester = new.semester
) > 1
then rollback;
end if;
END

当teachers发生变化时,同样只需查看该老师在同一时间是否同时出现在两个不同的课室中即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
create trigger teacher_check after insert on teachers
for each row
BEGIN
if count (
select room_number
from section natural join teachers
where year = new.year
and course_id = new.course_id
and ID = new.ID
and semester = new.semester
) > 1
then rollback;
end if;
END