目录
Java特训营-第六周-笔试部分
1、MySQL中,预设的、拥有最高权限超级用户的用户名为( D )[单选题]
2、SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体,其中,CREATE、DROP、ALTER语句是实现哪种功能( )[单选题( C )
3、Mysql中表student_info(id,name,birth,sex),字段类型都是varchar,插入:1018 , 赵六 , 2003-08-02 , 男;SQL正确的是( C )
4、delete from employee语句的作用是( )[单选题](B )
5、条件“IN(20,30,40)”表示( )[单选题]( C )
6、使用SELECT语句随机地从表中挑出指定数量的行,可以使用的方法是( D )[单选题]
8、要求删除商品表中价格大于3000的商品,下列SQL语句正确的是( A )
11、下面关于PreparedStatement的说法错误的 [单选题]( C )
12、如果为预编译SQL的问号赋值,那么正确的选项是哪一个?[单选题] ( B )
13、以下有关于SQL注入漏洞说法错误的是[单选题]( B )
14、使用Connection的哪个方法可以建立一个PreparedStatement接口【单选题】( B )
16、在Jdbc中使用事务,想要回滚事务事务的方法是什么?( C )
17、在成绩表中查询绩点在3.7-4.0之间,并且挂科数为0的学生的所有信息。下列SQL语句不正确的是( D )
18、对于数据库的查询操作,需要释放掉的数据库连接对象有哪些( BCD )
19、关于ResultSet结果集的next()方法,说法正确的是( AC )。
1、说说preparedStatement和Statement的区别。
3、executeQuery(),executeUpdate()的区别是什么?
Java特训营-第六周-笔试部分
一、选择题(每题3分,共60分)
1、MySQL中,预设的、拥有最高权限超级用户的用户名为( D )[单选题]
- A test
- B Administrator
- C DA
- D root
2、SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体,其中,CREATE、DROP、ALTER语句是实现哪种功能( )[单选题( C )
- A 数据操纵;
- B 数据控制;
- C 数据定义;
- D 数据查询;
3、Mysql中表student_info(id,name,birth,sex),字段类型都是varchar,插入:1018 , 赵六 , 2003-08-02 , 男;SQL正确的是( C )
- A insert overwrite student_info values('1018' , '赵六' , '2003-08-02' , '男');
- B insert into student_info values(1018 , '赵六' , '2003-08-02' , '男');
- C insert into student_info(`birth`,`id`,name,`sex`) values('2003-08-02' ,'1018' , '赵六' , '男');
- D insert into student_info value('1018' , '赵六' , '2003-08-02' , '男');
4、delete from employee语句的作用是( )[单选题](B )
- 删除当前数据库中整个employee表,包括表结构
- 删除当前数据库中employee表内的所有行
- 由于没有where子句,因此不删除任何数据
- 删除当前数据库中employee表内的当前行
5、条件“IN(20,30,40)”表示( )[单选题]( C )
- 年龄在20到40之间
- 年龄在20到30之间
- 年龄是20或30或40
- 年龄在30到40之间
6、使用SELECT语句随机地从表中挑出指定数量的行,可以使用的方法是( D )[单选题]
- 在LIMIT子句中使用RAND()函数指定行数,并用ORDER BY子句定义一个排序规则
- 只要使用LIMIT子句定义指定的行数即可,不使用ORDER BY子句
- 只要在ORDER BY子句中使用RAND()函数,不使用LIMIT子句法
- 在ORDER BY子句中使用RAND()函数,并用LIMIT子句定义行数
7、下列说法错误的是[单选题]( D )
- GROUP BY 子句用来分组 WHERE 子句的输出。
- WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。
- 聚合函数一般和group by 一起使用。
- HAVING 子句用来从FROM的结果中筛选行。
8、要求删除商品表中价格大于3000的商品,下列SQL语句正确的是( A )
- DELETE FROM 商品 WHERE 价格>3000
- DELETE * FROM 商品 WHERE 价格>3000
- DELETE FROM 商品
- UPDATE 商品 SET * =NULL WHERE 价格>3000
9、假设有选课表course_relation(student_id, course_id),其中student_id表示学号,course_id表示课程编号,如果小易现在想获取每个学生所选课程的个数信息,请问如下的sql语句正确的是( D)
A. select student_id, sum(course_id) from course_relation;
B、select student_id, sum(course_id) from lcourse_relation group by student_id;
C、select student_id, count(course_id) from course_relation;
D、select student_id, count(course_id) from course_relation group by student_id;
10、Mysql中表student_table(id,name,birth,sex)score_table(stu_id,subject_name,score),查询多个学科的总分最高的学生记录明细以及总分,如下SQL正确的是(A)?
A、
select t2.*,c1 as `最高分` from (select stu_id,sum(score) as c1 from score_table group by stu_id order by c1 desc limit 1) t1 join student_table t2 on t1.stu_id = t2.id ; |
B、
select t2.*,c1 as `最高分` from ( select stu_id,max(score) as c1 from score_table group by stu_id order by c1 desc limit 1 ) t1 join student_table t2 on t1.stu_id = t2.id ; |
C、
select t2.*,c1 as `最高分` from ( select stu_id,max(sum(score)) as c1 from score_table group by stu_id order by c1 desc limit 1 ) t1 join student_table t2 on t1.stu_id = t2.id ; |
D、
select t2.*,c1 as `最高分` from ( select stu_id,max(sum(score)) as c1 from score_table group by stu_id ) t1 join student_table t2 on t1.stu_id = t2.id ; |
11、下面关于PreparedStatement的说法错误的 [单选题]( C )
- PreparedStatement可以存储预编译的sql,从而提升执行效率
- PreparedStatement继承了Statement
- PreparedStatement不能用于批量更新的操作
- PreparedStatement可以有效的防止SQL注入
12、如果为预编译SQL的问号赋值,那么正确的选项是哪一个?[单选题] ( B )
- st.setInt("3",2000)
- pst.setInt(3,2000)
- pst.setFloat("salary",2000)
- pst.setString("salary","2000")
13、以下有关于SQL注入漏洞说法错误的是[单选题]( B )
- 为了防止SQL注入漏洞,应该采用预编译的方式
- 使用静态拼装的SQL语句可以避免SQL注入漏洞
- 可以对用户登录框的信息进行正则校验,从而可以避免一些不当的操作
- SQL注入漏洞就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
14、使用Connection的哪个方法可以建立一个PreparedStatement接口【单选题】( B )
- createPrepareStatement()
- prepareStatement()
- createPreparedStatement()
15、下面的描述正确的是什么( A)【单选题】
- PreparedStatement继承自StatementAA
- Statement继承自Preparedstatement
- ResultSet继承自Statement
- CallableStatement不继承自PreparedStatement
16、在Jdbc中使用事务,想要回滚事务事务的方法是什么?( C )
- Connection commit ()
- Connection setAutoCommit ()
- Connection rollback ()
- Connection savepoint()
17、在成绩表中查询绩点在3.7-4.0之间,并且挂科数为0的学生的所有信息。下列SQL语句不正确的是( D )
- SELECT * FROM 学生 WHERE 绩点>=3.7 and 绩点<=4.0 and 挂科数=0
- SELECT * FROM 学生 WHERE 绩点 BETWEEN 3.7 and 4.0 and 挂科数=0
- SELECT * FROM 学生 WHERE 绩点>=3.7 and (绩点<=4.0 and 挂科数=0)
- SELECT * FROM 学生 WHERE 挂科数=0 and(绩点>=3.7 OR 绩点<=4.0)
多选择题
18、对于数据库的查询操作,需要释放掉的数据库连接对象有哪些( BCD )
- PrepareStatement
- Statement
- ResultSet
- Connection
19、关于ResultSet结果集的next()方法,说法正确的是( AC )。
- 如果新的当前行有效,返回值为true
- ResultSet光标最初位于结果集的第一行
- 第一次调用next方法使第一行成为当前行
- 当调用next()方法返回值为false时,说明光标位于最后一行
20、以下关于JDBC的说法正确的是?( AC )
- Java程序与数据库连接的一种机制
- Java程序与浏览器交互的一种机制
- 英文全称为:Java Database Connectivity
- 英文全称为:Java DataSource Connectivity
填空题(每题2分,共20分)
1、当某字段要使用AUTO_INCREMENT的属性时,该字段必须是____int_________类型的数据。
2、补全语句:select vend_id,count(*) from products where prod_price>=10 group by vend_id _having___ count(*)>=2;
3、计算字段的累加和的函数是:____sum___
4、现有一销售表,表名是sale,它的结构如下:
id int (标识号) codno char(7) (商品编码) codname varchar(30) (商品名称) spec varchar(20) (商品规格) price numeric(10,2) (价格) sellnum int (销售数量) deptno char(3) (售出分店编码) selldate datetime (销售时间) |
要求:写出查询销售时间段在2002-2-15日到2002-4-29之间,分店编码是01的所有记录。
___________:SELECT * FROM sale WHERE selldate >= '2002-2-15' AND selldate <='2002-4-29' AND deptno = '01'_____________________________________________________________________________
- 对一个超过12000个汉字的内容,应用一个__text______型的字段来存放。
- MySQL是一种____多用户________(多用户、单用户)的数据库管理系统
- 用SELECT进行模糊查询时,可以使用___like_____关键字
- 事务提交方法是________commit()______________
- 在MySQL中,只有使用了____Innodb_______引擎的数据库才支持事务
- 当一个连接对象被创建时,默认情况下____自动_____提交事务
简答题(每题5分,共20分)
1、说说preparedStatement和Statement的区别。
Statement 静态传参 拼接语句 不防SQL注入
PreparedStatement 动态传参(?),可防SQL注入
2、事务的概念,及事务4个特点。
事务是一组不可分割的数据操作单元(里面可以有一条sql或多条SQL)
1、原子性 A。
* 一个事务,要么全部完成,要么全部不完成。
* 2、一致性 C。
* 在事务开始之前和事务结束之后,数据库的完整性没有被破坏。
* 3、隔离性 I
* 数据库允许多个事务同时对数据进行处理。每个事务之间是相互隔离。
* 4、持久性 D
* 事务结束以后,对数据的增删改是永久性的。
3、executeQuery(),executeUpdate()的区别是什么?
executeUpdate 用来执行修改,插入,删除操作,返回结果是int
executeQuery只能进行查询,返回结果是结果集(ResultSet)对象,
4、数据库中常见的几种约束有哪些?
主键约束,外键约束,检查约束,唯一约束,默认约束
上机题
建表
CREATE TABLE account(
id number PRIMARY KEY,
`no` VARCHAR(30) UNIQUE,
`password` VARCHAR(30),
`name` VARCHAR(30),
money number
);
模拟开户
public class CreateBankAccount {
public Integer add(String id,Double money) {
Connection conn = null;
try {
conn = JDBCUtil.getConnection();
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (SQLException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
int i = 0;
String sql = "insert into account (id,money) values (?,?)";
PreparedStatement preparedStatement = null;
try {
preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1,id);
preparedStatement.setDouble(2,money);
i = preparedStatement.executeUpdate();
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
JDBCUtil.close(conn,preparedStatement);
}
return i;
}
}
package Util;
import java.io.IOException;
import java.sql.*;
import java.util.Objects;
import java.util.Properties;
public class JDBCUtil {
public static void close(Connection conn, Statement stmt, ResultSet rs) {
if(Objects.nonNull(stmt)) {
try {
stmt.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
if(Objects.nonNull(conn)){
try {
conn.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
if(Objects.nonNull(rs)){
try {
rs.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
/**
* 关闭链接的方法
*/
public static void close(Connection conn, Statement stmt) {
if(Objects.nonNull(stmt)) {
try {
stmt.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
if(Objects.nonNull(conn)){
try {
conn.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
/**
* 获取JDBC连接的方法
* @return
*/
public static Connection getConnection() throws ClassNotFoundException, SQLException, IOException {
Connection conn = null;
Properties properties = new Properties();
properties.load(JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties"));
// 去jdbc.properties中取出属性名为mysql.url对应的值
String url = properties.getProperty("mysql.url");
String driverName = properties.getProperty("mysql.driverName");
String username = properties.getProperty("mysql.username");
String password = properties.getProperty("mysql.password");
Class.forName(driverName);
return DriverManager.getConnection(url, username, password)
模拟转账
public class BankAccountTransfer {
private final Connection conn;
Account account = new Account();
{
try {
conn = JDBCUtil.getConnection();
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (SQLException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public Integer transform(String out, String in, Double money) {
// 取款之前要先查询
ResultSet rs = null;
PreparedStatement preparedStatement = null;
PreparedStatement preparedStatement2 = null;
double b = 0;
String sql = "select money from account where id = ?";
try {
preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1, out);
rs = preparedStatement.executeQuery();
while (rs.next()) {
b = rs.getDouble("money");
}
Scanner sc = new Scanner(System.in);
System.out.println("请输入收款的账号:");
String s1 = sc.next();
System.out.println("请输入收款的姓名:");
String s2 = sc.next();
System.out.println("请输入转账的金额:");
String s3 = sc.next();
if (b >= money && account.getId().equals(s1)) {
// 余额够
// 执行修改
conn.setAutoCommit(false);
sql = "update account set money = money - ? where id = ?";
preparedStatement = conn.prepareStatement(sql);
preparedStatement.setDouble(1, money);
preparedStatement.setString((int) 2, out);
int i = preparedStatement.executeUpdate();
sql = "update account set money = money + ? where id = ?";
preparedStatement2 = conn.prepareStatement(sql);
preparedStatement2.setDouble(1, money);
preparedStatement2.setString((int) 2, in);
i = preparedStatement2.executeUpdate();
conn.commit();
return i;
} else {
// 余额不够
throw new RuntimeException("余额不足,转账失败");
}
} catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException ex) {
throw new RuntimeException(ex);
}
throw new RuntimeException(e);
} finally {
JDBCUtil.close(conn, preparedStatement, rs);
JDBCUtil.close(null, preparedStatement2);
}
}
}