SQL+JDBC测试试题
一、单选题(共25题,每题2分,合计50分)
1、给定下列代码:
在Java中,阅读如下代码,则编译运行后的输出结果是( )。
interface Face{
int counter = 40;
}
public class Test implements Face {
private static int counter;
public static void main(String[] args) {
System.out.println(++counter);
}
}
A) 40 B) 41 C) 0 D) 1
2、main()方法的返回类型是?
A.int B.void C.Boolean D.static
3、运行下列程序,输出为何?( )
public class Qd803 {
public static void main(String args[]) {
String word = "restructure";
System.out.println(word.substring(2, 3));
}
}
A.est B.es C.str D.s
4、代码System.out.println(""+11+1); 的输出结果是:( )
A.(空) B.11 C.12 D.111
5、以下关于Object类说法错误的是( )。
A) 一切类都继承自Object类 B) 接口亦继承Object类
C) Object类中定义了toString()方法 D) Object类在java.lang包中
6、在Java中,以下程序编译运行后的输出结果是( )。
public class Test{
public void add(int i) throws NullPointerException {
if(i == 0)
throw new NullPointerException(); //方法执行结束 ,并抛出异常
System.out.println("add出现异常");
}
public static void main(String[] args) {
Test t = new Test();
try {
t.add(0);//此处产生异常,则执行权转catch
System.out.println("add方法返回");
}catch(Exception e) {
System.out.println("捕获异常");
}
}
}
A) add出现异常
B) add出现异常
add方法返回
C) add方法返回
捕获异常
D) 捕获异常
7、 有一个类(class)如下:
class Test {
void test(int i) {
System.out.println(“I am an int.”);
}
void test(String s) {
System.out.println(“I am a string.”);
}
public static void main(String args[]) {
Test t=new Test();
char ch='y';
t.test(ch);
}
}
针对上述Test类,运行结果为?( )
A.I am an int. B. I am a string.
C.运行时错误 D.编译错误
8、若要写出一个能将一组键(Key)与一组值(Value)结合的类,下述所列的接口(interface),哪个是最适用的?( )
A.Map B.Set C.SortedSet D.Collection
9、在Java中,尝试对null对象操作时,会产生( )类型的异常。
A) ArithmeticException B) NullPointerException
C) IOException D) ClassNotFoundException
10、给定如下Java程序的代码片段,在下划线处,加入( )语句,可以使这段代码编译通过。
public void method1() throws IOException{}
public void method2()__________{
method1();
}
A) throw IOException B) throws IOException
C) throw Exception D) throws RuntimeException
11、在Oracleo数据库中,根据id条件删除一条记录,下列哪条语句是对的()
A.delete * from Users where id = 1
B.delete from Users where id = 1
C.truncate Users where id = 1
D.drop Users where id = 1
12、在MySQL数据库中,以下约束不能同时使用在表字段上的是()
A.PRIMARY KEY 和 UNIQUE B.UNIQUE 和 NOT NULL
C.NULL 和 PRIMARY KEY D.UNIQUE 和 AUTO_INCREMENET
13、查询不可以重复数据时,去重的关键字是()
A.DISTINCT B.GROUP BY C.AS D.SELECT
14、关于having和where的用法,下列使用错误的是()
A.WHERE和HAVING写在GROUP BY的前面
B.WHERE不能写在HAVING的后面
C.WHERE后面不能跟聚合函数
D.HAVING是分组之后再进行筛选
15、"事务的所有操作在数据库中要么全部正确反映出来要么全部不反映",这是事务的哪一个特性?( )
A.原子性 B.一致性 C.隔离性 D.持久性
16、SQL语言中,删除一个表的命令是:( )
A.DELETE TABLE B.DROP TABLE C.CLEAR TABLE D.REMORE TABLE
17、假定已经获得一个数据库连接,使用变量conn表示,删除name值为“张三”的记录,则横 线处可以填入以下( )代码。
String strSql = "delete from Person where name=?";
PreparedStatement pstmt = conn.prepareStatement(strSql);
__________________
pstmt.executeUpdate();
A) pstmt.setString(0,"张三"); B) pstmt.setString(1,"张三");
C) pstmt.setInt(0,"张三"); D) pstmt.setInt(1,"张三");
18、使用jdbc访问数据库,以下代码正确的是:( )
A) Statement smt = con.createStatement();
ResultSet res = smt.executeQuery("select * from table");
B) Statement smt = con.createStatement("select * from table");
ResultSet res = smt.executeQuery();
C) PreparedStatement smt = con.createStatement("select * from table");
ResultSet res = smt.executeQuery();
D) PreparedStatement smt = con.prepareStatement();
ResultSet res = smt.executeQuery("select * from table");
19、表student有三个字段(id,name,age),现在要插入一条数据,正确的是()
A. insert into student values('jack');
B. insert into student(id,name,age) values(1, 'jack',12);
C. insert int student values(1,”jack”,12);
D. insert to student(id,name,age) values(12);
20、下列说法正确的是()
A. alter和update关键字都可以修改表中的内容
B. search和select关键字都可以查询表中的内容;
C. insert 和 add 关键字都可以向表中插入内容;
D. delete和truncate关键字都可以删除表中的内容;
21、表示两个或多个事务可以同时运行而不互相影响的是( )
A 原子性 B 隔离性 C 一致性 D 持久性
22、使用Connection 的哪个方法可以建立一个PreparedStatement接口( )
A.createStatement()
B.preparedStatement()
C.Statement()
D. prepareStatement()
23、SELECT * FROM emp;这条SQL语句执行,如果员工表中没有何数据,那么ResultSet中将会是()
A.null
B.有数据
C.不是null,但没有数据
D.出现SQLException异常
24、jdbc执行查询并且返回ResultSet对象的操作方法( )
A.execute
B.executeSelect
C.executeUpdate
D.executeQuery
25、在MySQL数据库中,查询数据库中emp表的前3条数据,下列选项中正确的是( )
A.select * from emp limit 1,3 B.select * from emp limit 0,2
C.select * from emp limit 3 D.select * from emp limit 1,4
二.简答题(每题5分,共20分)
- delete语句与truncate语句的区别
- truncate 执行删除操作时,数据不可回滚
delete执行删除操作时,数据可回滚
- truncate 执行删除时,如果表中有自增列,则自增列还原到初始值
delete执行删除操作时 ,自增列不还原
- truncate 不能删除有主外关系中的主表
delete可以删除数据
- Statement与PreparedStatement的区别
- PreparedStatement是预编译SQL对象, 可以有效防止SQL注入,增加数据安全性
Statement通过拼接SQL,不能防止SQL注入,数据是不安全的
- PreparedStatemen是预编译SQL对象 ,当执行同一个SQL语句多次时,仅编译一次,执行多次,效率比较高
Statement执行SQL语句时,先编译,再执行, 同一个SQL语句多次时,需要多次编译多次执行,效率比较低
- 数组与链表的区别 :(ArrayList与LinkedList的区别)
- 数组在内存中连续存储 ,遍历速度比较快,但因连续存储,随机添加或删除操作复杂
- 链表在内存中不要求连接存储 ,遍历速度比较慢,但随机添加或删除操作比较方便
- MySQL数据库中,char类型与varchar类型的区别?
Char :固定长度 ,Varchar:可变长度
如果存储的数据长度不一致时,Char存储时,不足使用空格填充.varchar按字符长度存储
Char :存取数据时,速度快 ,varChar :操作比较复杂
- 事务的特点及隔离级别
1) 事务四个特征(ACID)
原子性,一致性,隔离性,持久性
2) 事务的隔离级别
read uncommitted : 读未提交的数据
read committed :读已提交的数据
repeatable read : 可重复读
serializable : 串行化
三、使用MySQL编写以下SQL语句 (30)
表STUDENT(学生):
中文 | 编码 | 类型 |
学号 | STUDENT_ID | INT |
姓名 | NAME | VARCHAR(200) |
年龄 | AGE | INT |
性别 | SEX | INT |
表SUBJECT(课程表):
中文 | 编码 | 类型 |
课程编号 | SUBJECT_ID | INT |
课程名 | SUBJECT | VARCHAR(200) |
表SCORE(成绩):
中文 | 编码 | 类型 |
学号 | STUDENT_ID | INT |
课程编号 | SUBJECT_ID | INT |
成绩 | SCORE | INT |
根据上图中的表结构,实现以下要求:
- 用Sql找出姓名有重名的学生,查询字段包括:姓名及对应的人数
Select name, count(*) from student
Group by name
Having count(*) >1
- 查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程名降序排列,查询字段包括:课程名、平均成绩。
Select sub.subject,avg(s.score) avgscore
From subject sub inner join score s on sub.suject_id = s.subject_id
Group by sub.subject_id
Order by avgscore ,s.subject desc;
- 查询所有科目成绩都在80分以上的学生信息,查询字段包括:学号,姓名
Select student_id,name
From student
Where student_id not in(select student_id from score where score <80)
- 查询平均分高于80分的学生信息,查询字段包括:学号,姓名
Select student_id,name
From student
Where student_id in(select student_id from score group by student_id having avg(score)>80)
- 查询每门课程的最高分和最低分 (课程名,最高成绩,最低成绩)
Select sub.subject,max(score) ,min(score)
From subject sub inner join score s on sub.suject_id = s.subject_id
Group by sub.subject_id
- 查询”java”课程最高分的学生信息(学号,学生姓名,课程名,成绩)
Select s.student_id ,s.name,sj.subject,sc.score
From student s innner join score sc on s.student_id=sc.student_id
Inner join subject sj on sj.subject_id = sc.subject_id
Where sc.score =(select max(score) from score
where subject_id=(select subject_id from subject where subject=’java’)))
and sj.subject=’java’