2022-8-21 第七小组 学习日记 (day45)周测

目录

                        ​​​​​​​        ​​​​​​​        ​​​​​​​        Java特训营-第六周-笔试部分

一、选择题(每题3分,共60分)

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 )[单选题]

7、下列说法错误的是[单选题](  D   )

8、要求删除商品表中价格大于3000的商品,下列SQL语句正确的是(   A  )

9、假设有选课表course_relation(student_id, course_id),其中student_id表示学号,course_id表示课程编号,如果小易现在想获取每个学生所选课程的个数信息,请问如下的sql语句正确的是( D)

10、Mysql中表student_table(id,name,birth,sex)score_table(stu_id,subject_name,score),查询多个学科的总分最高的学生记录明细以及总分,如下SQL正确的是(A)?

11、下面关于PreparedStatement的说法错误的 [单选题]( C   )

12、如果为预编译SQL的问号赋值,那么正确的选项是哪一个?[单选题] (   B  )

13、以下有关于SQL注入漏洞说法错误的是[单选题](  B    )

14、使用Connection的哪个方法可以建立一个PreparedStatement接口【单选题】(    B  )

15、下面的描述正确的是什么(    A)【单选题】

16、在Jdbc中使用事务,想要回滚事务事务的方法是什么?(   C  )

17、在成绩表中查询绩点在3.7-4.0之间,并且挂科数为0的学生的所有信息。下列SQL语句不正确的是(    D  )

多选择题

18、对于数据库的查询操作,需要释放掉的数据库连接对象有哪些(  BCD    )

19、关于ResultSet结果集的next()方法,说法正确的是( AC      )。

20、以下关于JDBC的说法正确的是?(  AC   )

填空题(每题2分,共20分)

简答题(每题5分,共20分)

1、说说preparedStatement和Statement的区别。

2、事务的概念,及事务4个特点。

3、executeQuery(),executeUpdate()的区别是什么?

4、数据库中常见的几种约束有哪些?

上机题

建表

模拟开户

 模拟转账


Java特训营-第六周-笔试部分

一、选择题(每题3分,共60分)

  1. 1、MySQL中,预设的、拥有最高权限超级用户的用户名为( D )[单选题]

  1. A test                     
  2. B Administrator
  3. C DA    
  4. D root
  1. 2、SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体,其中,CREATE、DROP、ALTER语句是实现哪种功能( )[单选题( C  )

  1. A 数据操纵;           
  2. B 数据控制;
  3. C 数据定义;                        
  4. D 数据查询;
  1. 3、Mysql中表student_info(id,name,birth,sex),字段类型都是varchar,插入:1018 , 赵六 , 2003-08-02 , 男;SQL正确的是( C )

  1. A insert overwrite student_info values('1018' , '赵六' , '2003-08-02' , '男');              
  2. B insert into student_info values(1018 , '赵六' , '2003-08-02' , '男');
  3. C insert into student_info(`birth`,`id`,name,`sex`) values('2003-08-02' ,'1018' , '赵六' , '男');            
  4. D insert into student_info value('1018' , '赵六' , '2003-08-02' , '男');
  1. 4、delete from employee语句的作用是( )[单选题](B   )

  1. 删除当前数据库中整个employee表,包括表结构
  2. 删除当前数据库中employee表内的所有行
  3. 由于没有where子句,因此不删除任何数据
  4. 删除当前数据库中employee表内的当前行
  1. 5、条件“IN(20,30,40)”表示( )[单选题]( C    )

  1. 年龄在20到40之间
  2. 年龄在20到30之间
  3. 年龄是20或30或40
  4. 年龄在30到40之间
  1. 6、使用SELECT语句随机地从表中挑出指定数量的行,可以使用的方法是( D )[单选题]

  1. 在LIMIT子句中使用RAND()函数指定行数,并用ORDER BY子句定义一个排序规则
  2. 只要使用LIMIT子句定义指定的行数即可,不使用ORDER BY子句
  3. 只要在ORDER BY子句中使用RAND()函数,不使用LIMIT子句法
  4. 在ORDER BY子句中使用RAND()函数,并用LIMIT子句定义行数
  1. 7、下列说法错误的是[单选题](  D   )

  1. GROUP BY 子句用来分组 WHERE 子句的输出。
  2. WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。
  3. 聚合函数一般和group by 一起使用。
  4. HAVING 子句用来从FROM的结果中筛选行。
  1. 8、要求删除商品表中价格大于3000的商品,下列SQL语句正确的是(   A  )

  1. DELETE FROM 商品 WHERE 价格>3000      
  2. DELETE * FROM 商品 WHERE 价格>3000  
  3. DELETE FROM 商品     
  4. 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;

Bselect 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   )

  1. PreparedStatement可以存储预编译的sql,从而提升执行效率
  2. PreparedStatement继承了Statement    
  3. PreparedStatement不能用于批量更新的操作   
  4. PreparedStatement可以有效的防止SQL注入

12、如果为预编译SQL的问号赋值,那么正确的选项是哪一个?[单选题] (   B  )

  1. st.setInt("3",2000)       
  2. pst.setInt(3,2000)    
  3. pst.setFloat("salary",2000)      
  4. pst.setString("salary","2000")

13、以下有关于SQL注入漏洞说法错误的是[单选题]  B    )

  1. 为了防止SQL注入漏洞,应该采用预编译的方式
  2. 使用静态拼装的SQL语句可以避免SQL注入漏洞
  3. 可以对用户登录框的信息进行正则校验,从而可以避免一些不当的操作
  4. SQL注入漏洞就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令

14、使用Connection的哪个方法可以建立一个PreparedStatement接口【单选题】   B  )

  1. createPrepareStatement()
  2. prepareStatement()  
  3. createPreparedStatement()

15、下面的描述正确的是什么(    A)【单选题】

  1. PreparedStatement继承自StatementAA
  2. Statement继承自Preparedstatement
  3. ResultSet继承自Statement
  4. CallableStatement不继承自PreparedStatement

16、在Jdbc中使用事务,想要回滚事务事务的方法是什么?   C  )

  1. Connection commit ()
  2. Connection setAutoCommit ()
  3. Connection rollback ()
  4. Connection savepoint()

17、在成绩表中查询绩点在3.7-4.0之间,并且挂科数为0的学生的所有信息。下列SQL语句不正确的是    D  )

  1. SELECT * FROM 学生 WHERE 绩点>=3.7 and 绩点<=4.0 and 挂科数=0
  2. SELECT * FROM 学生 WHERE 绩点 BETWEEN 3.7 and 4.0 and 挂科数=0
  3. SELECT * FROM 学生 WHERE 绩点>=3.7 and (绩点<=4.0 and 挂科数=0)
  4. SELECT * FROM 学生 WHERE 挂科数=0 and(绩点>=3.7 OR 绩点<=4.0)
  • 多选择题

18、对于数据库的查询操作,需要释放掉的数据库连接对象有哪些(  BCD    )

  1. PrepareStatement
  2. Statement 
  3. ResultSet 
  4. Connection
  1. 19、关于ResultSet结果集的next()方法,说法正确的是AC      )

  1. 如果新的当前行有效,返回值为true      
  2. ResultSet光标最初位于结果集的第一行
  3. 第一次调用next方法使第一行成为当前行    
  4. 当调用next()方法返回值为false时,说明光标位于最后一行

20、以下关于JDBC的说法正确的是? AC   )

  1. Java程序与数据库连接的一种机制
  2. Java程序与浏览器交互的一种机制
  3. 英文全称为:Java Database Connectivity  
  4. 英文全称为: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'_____________________________________________________________________________

  1. 对一个超过12000个汉字的内容,应用一个__text______型的字段来存放。
  2. MySQL是一种____多用户________(多用户、单用户)的数据库管理系统
  3. 用SELECT进行模糊查询时,可以使用___like_____关键字
  4. 事务提交方法是________commit()______________
  5. 在MySQL中,只有使用了____Innodb_______引擎的数据库才支持事务
  6. 当一个连接对象被创建时,默认情况下____自动_____提交事务
  • 简答题(每题5分,共20分)

  1. 1、说说preparedStatement和Statement的区别。

Statement 静态传参 拼接语句 不防SQL注入

PreparedStatement 动态传参(?),可防SQL注入

  1. 2、事务的概念,及事务4个特点。

事务是一组不可分割的数据操作单元(里面可以有一条sql或多条SQL)

1、原子性 A。

 *  一个事务,要么全部完成,要么全部不完成。

 * 2、一致性 C。

 *  在事务开始之前和事务结束之后,数据库的完整性没有被破坏。

 * 3、隔离性 I

 *   数据库允许多个事务同时对数据进行处理。每个事务之间是相互隔离。

 * 4、持久性 D

  *  事务结束以后,对数据的增删改是永久性的。

  1. 3、executeQuery(),executeUpdate()的区别是什么?

executeUpdate 用来执行修改,插入,删除操作,返回结果是int

executeQuery只能进行查询,返回结果是结果集(ResultSet)对象,

  1. 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);
       }
   }
}

你可能感兴趣的:(测试,学习,java,sql)