• 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、数据库中常见的几种约束有哪些?

        主键约束,外键约束,检查约束,唯一约束,默认约束

    上机题

    建表

    1. CREATE TABLE account(
    2. id number PRIMARY KEY,
    3. `no` VARCHAR(30) UNIQUE,
    4. `password` VARCHAR(30),
    5. `name` VARCHAR(30),
    6. money number
    7. );

    模拟开户

    1. public class CreateBankAccount {
    2. public Integer add(String id,Double money) {
    3. Connection conn = null;
    4. try {
    5. conn = JDBCUtil.getConnection();
    6. } catch (ClassNotFoundException e) {
    7. throw new RuntimeException(e);
    8. } catch (SQLException e) {
    9. throw new RuntimeException(e);
    10. } catch (IOException e) {
    11. throw new RuntimeException(e);
    12. }
    13. int i = 0;
    14. String sql = "insert into account (id,money) values (?,?)";
    15. PreparedStatement preparedStatement = null;
    16. try {
    17. preparedStatement = conn.prepareStatement(sql);
    18. preparedStatement.setString(1,id);
    19. preparedStatement.setDouble(2,money);
    20. i = preparedStatement.executeUpdate();
    21. } catch (SQLException e) {
    22. throw new RuntimeException(e);
    23. } finally {
    24. JDBCUtil.close(conn,preparedStatement);
    25. }
    26. return i;
    27. }
    28. }
    29. package Util;
    30. import java.io.IOException;
    31. import java.sql.*;
    32. import java.util.Objects;
    33. import java.util.Properties;
    34. public class JDBCUtil {
    35. public static void close(Connection conn, Statement stmt, ResultSet rs) {
    36. if(Objects.nonNull(stmt)) {
    37. try {
    38. stmt.close();
    39. } catch (SQLException e) {
    40. throw new RuntimeException(e);
    41. }
    42. }
    43. if(Objects.nonNull(conn)){
    44. try {
    45. conn.close();
    46. } catch (SQLException e) {
    47. throw new RuntimeException(e);
    48. }
    49. }
    50. if(Objects.nonNull(rs)){
    51. try {
    52. rs.close();
    53. } catch (SQLException e) {
    54. throw new RuntimeException(e);
    55. }
    56. }
    57. }
    58. /**
    59. * 关闭链接的方法
    60. */
    61. public static void close(Connection conn, Statement stmt) {
    62. if(Objects.nonNull(stmt)) {
    63. try {
    64. stmt.close();
    65. } catch (SQLException e) {
    66. throw new RuntimeException(e);
    67. }
    68. }
    69. if(Objects.nonNull(conn)){
    70. try {
    71. conn.close();
    72. } catch (SQLException e) {
    73. throw new RuntimeException(e);
    74. }
    75. }
    76. }
    77. /**
    78. * 获取JDBC连接的方法
    79. * @return
    80. */
    81. public static Connection getConnection() throws ClassNotFoundException, SQLException, IOException {
    82. Connection conn = null;
    83. Properties properties = new Properties();
    84. properties.load(JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties"));
    85. // 去jdbc.properties中取出属性名为mysql.url对应的值
    86. String url = properties.getProperty("mysql.url");
    87. String driverName = properties.getProperty("mysql.driverName");
    88. String username = properties.getProperty("mysql.username");
    89. String password = properties.getProperty("mysql.password");
    90. Class.forName(driverName);
    91. return DriverManager.getConnection(url, username, password)

     模拟转账

    1. public class BankAccountTransfer {
    2. private final Connection conn;
    3. Account account = new Account();
    4. {
    5. try {
    6. conn = JDBCUtil.getConnection();
    7. } catch (ClassNotFoundException e) {
    8. throw new RuntimeException(e);
    9. } catch (SQLException e) {
    10. throw new RuntimeException(e);
    11. } catch (IOException e) {
    12. throw new RuntimeException(e);
    13. }
    14. }
    15. public Integer transform(String out, String in, Double money) {
    16. // 取款之前要先查询
    17. ResultSet rs = null;
    18. PreparedStatement preparedStatement = null;
    19. PreparedStatement preparedStatement2 = null;
    20. double b = 0;
    21. String sql = "select money from account where id = ?";
    22. try {
    23. preparedStatement = conn.prepareStatement(sql);
    24. preparedStatement.setString(1, out);
    25. rs = preparedStatement.executeQuery();
    26. while (rs.next()) {
    27. b = rs.getDouble("money");
    28. }
    29. Scanner sc = new Scanner(System.in);
    30. System.out.println("请输入收款的账号:");
    31. String s1 = sc.next();
    32. System.out.println("请输入收款的姓名:");
    33. String s2 = sc.next();
    34. System.out.println("请输入转账的金额:");
    35. String s3 = sc.next();
    36. if (b >= money && account.getId().equals(s1)) {
    37. // 余额够
    38. // 执行修改
    39. conn.setAutoCommit(false);
    40. sql = "update account set money = money - ? where id = ?";
    41. preparedStatement = conn.prepareStatement(sql);
    42. preparedStatement.setDouble(1, money);
    43. preparedStatement.setString((int) 2, out);
    44. int i = preparedStatement.executeUpdate();
    45. sql = "update account set money = money + ? where id = ?";
    46. preparedStatement2 = conn.prepareStatement(sql);
    47. preparedStatement2.setDouble(1, money);
    48. preparedStatement2.setString((int) 2, in);
    49. i = preparedStatement2.executeUpdate();
    50. conn.commit();
    51. return i;
    52. } else {
    53. // 余额不够
    54. throw new RuntimeException("余额不足,转账失败");
    55. }
    56. } catch (SQLException e) {
    57. try {
    58. conn.rollback();
    59. } catch (SQLException ex) {
    60. throw new RuntimeException(ex);
    61. }
    62. throw new RuntimeException(e);
    63. } finally {
    64. JDBCUtil.close(conn, preparedStatement, rs);
    65. JDBCUtil.close(null, preparedStatement2);
    66. }
    67. }
    68. }
  • 相关阅读:
    Visual Studio Code使用
    【华为云】用VNC远程连接Ubuntu20.04图形界面
    一些有趣的VBS脚本
    【计算机组成原理】浮点数的运算
    局域网https自签名教程
    查询优化与并发控制[姊妹篇.第六弹]
    美军“战场物联网”及其区块链保证技术的研究进展
    vue-pdf(v4.3.0)
    软考的网络工程师对就业有用吗?
    Qt之模块介绍
  • 原文地址:https://blog.csdn.net/weixin_56982770/article/details/126474889