第二次月考题_第1页
第二次月考题_第2页
第二次月考题_第3页
第二次月考题_第4页
第二次月考题_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、LOREM IPSUM DOLOR第第1题解析题解析(A):sqlsql语句的分类:语句的分类:DMLDML、DQLDQL、DDLDDL、DCLDCL1.DML1.DML:数据操作语言:数据操作语言, ,分为:分为:insertinsert:向数据表张插入一条记录。:向数据表张插入一条记录。updateupdate:用于修改已存在表中的记录的内容。:用于修改已存在表中的记录的内容。deletedelete:删除数据表中的一条或多条记录,也可以删除:删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是,它的操作对象仍是记录。数据表中的所有记录,但是,它的操作对象仍是记录。2.DQL:

2、2.DQL:数据查询语句数据查询语句: :selectselect3.DDL:3.DDL:数据定义语言数据定义语言CreateCreate:可以创建数据库和数据库的一些对象。:可以创建数据库和数据库的一些对象。DropDrop语句:可以删除数据表、索引、触发程语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。序、条件约束以及数据表的权限等。AlterAlter语句:修改数据表定义及属性语句:修改数据表定义及属性4.DCL:4.DCL:数据控制语句数据控制语句GrantGrant语句:允许对象的创建者给某用户或某语句:允许对象的创建者给某用户或某组或所有用户(组或所有用户(PUB

3、LICPUBLIC)某些特定的权限。)某些特定的权限。第第2题解析题解析(A):能够自动创建索引的约束是:主键约束和唯一约能够自动创建索引的约束是:主键约束和唯一约束。束。第第4题解析题解析(B):execute,executeQuery,executeUpdate:1.方法executeQuery:用于产生单个结果集的语句,例如 SELECT 语句。 被使用最多的执行 SQL 语句的方法是 executeQuery。这个方法被用来执行 SELECT 语句,它几乎是使用最多的 SQL 语句。2.方法executeUpdate:用于执行INSERT、UPDATE 或 DELETE 语句以及SQL

4、 DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。 3.execute:用于执行多个结果集、多个更新计数或二者结合的语句。多数程序员不会需要该高级功能。其次,当不知道方法的具体内容是update还是query的时候使用execute。如:传入的参数是用户所编写,也许这个

5、程序是一个数据库模拟器,由用户自由编写sql语句,并获得相应响应。此时用execute。第第5题解析题解析(B):oracle里面的替代变量:&和&是oracle里的替代变量。如果有一个&name,在sql执行的时候,会提示你输入一个name对应的值。然后name的值会替代到sql里,这里是替代,不是参数绑定,所以可以替换sql中的静态部分,比如字段名,表名 。&也是替代变量,和&一样的功能,不过它是多次替代。例如:select &fieldname from dual; select sysdate from dual;第第8题解析题解析(B)

6、:concat(char1,char2):返回两个字符串连接后的结果,两个参数char1,char2是要连接的两个字符串。等价操作:|.如果char1和char2任何一个为null,相当于连接了一个空格。第第12题解析题解析(D):1.void addBatch(String sql)来执行批处理,将给定的 SQL 命令添加到此 PreparedStatement 对象的当前命令列表中。通过调用方法 executeBatch 可以批量执行此列表中的命令。int executeBatch():将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。返回:包含批中每个命令的一

7、个元素的更新计数所组成的数组(数组中的每个元素为:成功处理了命令后,执行命令所影响数据库中行数的更新计数)。数组的元素根据将命令添加到批中的顺序排序。 Connection conn = null;Connection conn = null; Statement stmt = null; Statement stmt = null; try try stmt=conn.createStatement(); stmt=conn.createStatement(); conn.setAutoCommit(false);/ conn.setAutoCommit(false);/取消自动提交取消自动

8、提交 stmt.addBatch(insert into emp_lwq(ename,job)values(A,AAA); stmt.addBatch(insert into emp_lwq(ename,job)values(A,AAA); stmt.addBatch(insert into emp_lwq(ename,job)values(B,BBB); stmt.addBatch(insert into emp_lwq(ename,job)values(B,BBB); stmt.addBatch(insert into emp_lwq(ename,job)values(C,CCC); st

9、mt.addBatch(insert into emp_lwq(ename,job)values(C,CCC); stmt.addBatch(insert into emp_lwq(ename,job)values(D,DDD); stmt.addBatch(insert into emp_lwq(ename,job)values(D,DDD); stmt.addBatch(insert into emp_lwq(ename,job)values(E,EEE); stmt.addBatch(insert into emp_lwq(ename,job)values(E,EEE); / /执行批处

10、理语句执行批处理语句 stmt.executeBatch(); stmt.executeBatch(); / /如果没有异常,则执行此段代码如果没有异常,则执行此段代码 / /提交事务,真正向数据库中提交数据提交事务,真正向数据库中提交数据 mit(); mit(); catch(Exception e) catch(Exception e) / /将数据回滚将数据回滚 try try conn.rollback(); conn.rollback(); catch(Exception e1) catch(Exception e1) finally finally / /关闭关闭 2.state

11、ment和PreparedStatement: Statement是PreparedStatement的父接口,不进行预编译操作,减少了进行预编译的开销,单次运行。 PreparedStatement可以实现Statement的所有功能,但是之所以叫它预编译指令,是因为在创建它的一个对象时可以给定具有一定格式的SQL字符串,然后用它的setXXX方法给指定的SQL语句以填空的方式赋值,具有这样的特性后,它在多次执行一条固定格式的字符串时就很方便,也更有效率.不像Statement那样每次执行都要先编译字符串在执行SQL了。 OracleOracle中会将所有的中会将所有的SQLSQL语句先编译

12、语句先编译, ,叫做叫做 执行计划执行计划, ,放在放在OracleOracle内部的一个特定的缓存中内部的一个特定的缓存中, ,每次遇到相同的每次遇到相同的SQL,SQL,就会先调就会先调用缓存中的用缓存中的, ,如果不预编译如果不预编译, ,每次都用每次都用Statement,Statement,那么每次都要编那么每次都要编译译, ,在缓冲中会有很多重复的在缓冲中会有很多重复的 执行计划执行计划 影响数据库的性能影响数据库的性能. . SQLSQL注入攻击是利用设计上的漏洞注入攻击是利用设计上的漏洞, ,在目标服务器上运行在目标服务器上运行SQLSQL语语句进行攻击句进行攻击, ,动态生成

13、动态生成SQLSQL语句时没有对用户输入的数据进行验语句时没有对用户输入的数据进行验证,是证,是SQLSQL注入攻击得逞的主要原因。对于注入攻击得逞的主要原因。对于JDBCJDBC而言而言,SQL,SQL注入注入攻击只对攻击只对StatementStatement有效有效, ,对对PreparedStatementPreparedStatement是无效的是无效的, ,这是因这是因为为PreparedStatementPreparedStatement不允许在插入时改变查询的逻辑结构。不允许在插入时改变查询的逻辑结构。总结来说,statement和PreparedStatement实现机制不同

14、,注入只对SQL语句的准备(编译)过程有破坏作用,而PreparedStatement已经准备好了,执行阶段只是把输入串作为数据处理,不再需要对SQL语句进行解析、准备,因此也就避免了SQL注入问题。 如果有一条如果有一条SQLSQL语句语句: select : select * * from from 表表 where where 用户名用户名 = = 用户名用户名 StatementStatement的的SQLSQL语句是这样写的语句是这样写的: select : select * * from from 表表 where where 用户用户名名 = + = + 变量值变量值 + + P

15、reparedStatementPreparedStatement的的SQLSQL语句是这样写的语句是这样写的: select : select * * from from 表表 where where 用户名用户名 = ? = ? 然后对应然后对应? ?赋值赋值 这样我们就发现输入这样我们就发现输入 aa or 1 = 1 aa or 1 = 1 StatementStatement是将这个和是将这个和SQLSQL语句做字符串连接到一起执行语句做字符串连接到一起执行 PreparedStatementPreparedStatement是将是将 aa or 1 = 1 aa or 1 = 1

16、作为一个字符串赋值给作为一个字符串赋值给?, ?,做为做为 用户名用户名 字段的对应值字段的对应值, ,显然这样显然这样SQLSQL注入无从谈起了注入无从谈起了. .第第15题解析题解析(D):删除列:删除列:alter table alter table 表名表名 drop column drop column 列名列名修改列:修改列:alter table alter table 表名表名 modify(modify(列名,类型列名,类型) )修改列名:修改列名:alter table alter table 表名表名 rename column rename column 列名列名 to

17、 to 新列名新列名增加列:增加列:alter table alter table 表名表名 add(add(列名列名 类型类型) )第第20题解析题解析(A): DELETEDELETE和和TRUNCATETRUNCATE、drop:drop: 1.TRUNCATE1.TRUNCATE是一个是一个DDLDDL语言,向其他所有的语言,向其他所有的DDLDDL语言一样,语言一样,他将被隐式提交,不能对他将被隐式提交,不能对TRUNCATETRUNCATE使用使用ROLLBACKROLLBACK命令。当命令。当表被清空后表和表的索引将重新设置成初始大小,而表被清空后表和表的索引将重新设置成初始大小

18、,而deletedelete则则不能。不能。 2.TRUNCATE TABLE2.TRUNCATE TABLE:删除内容、释放空间但不删除定义(结:删除内容、释放空间但不删除定义(结构)。构)。 DELETE TABLE:DELETE TABLE:删除内容不删除定义,不释放空间。删除内容不删除定义,不释放空间。 DROP TABLE:删除内容 和定义,释放空间。第第25题解析题解析(A):alter system:修改的是参数文件,所有用户都会生效。动态的改变实例的属性(参数),也就是对实例的更改,一般是逻辑上的。alter session:只是对当前session生效,改变的是一个会话的属性

19、。alter database :数据文件、表空间、日志文件等等,和物理上的文件有关系的一些变更,也就是对数据库的更改,一般改变的是物理上的,通过alter database操作时会触发controlfile header和其他一些物理文件头信息的变化。session 是 会话, 也就是 本次连接到数据库的时候, 相关的基本信息。alter session set nls_date_format = yyyy-dd-mm就是修改本会话的 日期显示格式。这个修改, 仅仅修改本次登录的 情况。不修改别的会话的。add_monthsadd_months函数:函数:oracle add_months(

20、time,months)oracle add_months(time,months)函数可以得到某函数可以得到某一时间之前或之后一时间之前或之后n n个月的时间个月的时间如如 select add_months(sysdate,-6) from dual; select add_months(sysdate,-6) from dual; 该查询的结果是当前时间半年前的时间。该查询的结果是当前时间半年前的时间。第第26题解析题解析(A):1.ersect是对两个是对两个SQLSQL语句所产生的结果做处理的,与语句所产生的结果做处理的,与unionunion相相似。不同

21、的是,似。不同的是,unionunion基本上是一个基本上是一个oror(如果这个值存在于第一(如果这个值存在于第一句或是第二句,它就会被选出),而句或是第二句,它就会被选出),而intersectintersect则比较像则比较像andand(这(这个值要存在于第一句和第二句才会被选出),进行默认规则排个值要存在于第一句和第二句才会被选出),进行默认规则排序。序。unionunion是联集,而是联集,而intersectintersect是交集。是交集。2.union2.union和和union allunion all的区别:的区别:unionunion会自动压缩多个结果集中的重会自动压缩

22、多个结果集中的重复结果,会进行默认规则的排序。而复结果,会进行默认规则的排序。而union allunion all则将所有的结果全则将所有的结果全部显示出来,不管是不是重复,不进行排序。部显示出来,不管是不是重复,不进行排序。 3.minus3.minus:对两个结果集进行差集操作,不包括重复行,进行默:对两个结果集进行差集操作,不包括重复行,进行默认规则排序。认规则排序。第第28题解析题解析(D):JDBC的数据库事务默认是自动提交的.1.数据库的自动提交和手动提交:自动提交:在做记录更新时,系统会自动提交,不能保持事务的一致性,也就不能保证数据完整。2.手动提交:它则把事务处理将由你来完

23、成,在发生异常时,可以进行事务回滚,保持事务的一致。 3.3.应用区别:应用区别: 1 1、在、在JDBCJDBC中,如果中,如果ConnectionConnection类的方法类的方法setAutoCommit(booleanautoCommit)setAutoCommit(booleanautoCommit)赋给值为赋给值为falsefalse,那么就可以手动提交(调用,那么就可以手动提交(调用ConnectionConnection类的类的commit()commit()方法);方法);22、如果为、如果为truetrue那么就是自动提交。自动提那么就是自动提交。自动提交不用你挂念最后要

24、提交的问题,他会自动完成,交不用你挂念最后要提交的问题,他会自动完成,并且每条语句被当成一个事务;并且每条语句被当成一个事务;第第29题解析题解析(B):在在SQL SQL 语句中使用语句中使用commitcommit、rollbackrollback、savepointsavepoint作作用于事物,意味着可以把程序分解成多个单元,把用于事物,意味着可以把程序分解成多个单元,把事物分解为更小的元素。事物分解为更小的元素。commitcommit:使事件永久化(提交事物)。:使事件永久化(提交事物)。rollbackrollback:取消事件(回滚事物)。:取消事件(回滚事物)。savepoi

25、ntsavepoint:事物:事物commitcommit或者或者rollback rollback 的开始位置,的开始位置,然而结束位置就为然而结束位置就为commitcommit或者或者rollbackrollback所在位置。所在位置。 注意:事物与注意:事物与SQSQL L语句块差别语句块差别, ,语句块的开始与结束不代语句块的开始与结束不代表事物的开始与结束。每一个事物的开始为上一个事物表事物的开始与结束。每一个事物的开始为上一个事物结束的位置,事物的结束为出现结束的位置,事物的结束为出现commit commit 或者或者rollbackrollback的的位置。位置。第第35题解

26、析题解析(B):1.not null:1.not null:非空约束。为字段定义非空约束。为字段定义not nullnot null约束后,该字段不能为约束后,该字段不能为空值,在一个表中可以有多个空值,在一个表中可以有多个not nullnot null,not nullnot null约束只能在列约束只能在列级定义。级定义。2.unique2.unique:唯一约束。为字段定义:唯一约束。为字段定义uniqueunique后,该字段不能包含重后,该字段不能包含重复值。复值。uniqueunique既可以在列级定义,也可以在表级定义。在既可以在列级定义,也可以在表级定义。在oracleora

27、cle系统中被定义的系统中被定义的uniqueunique约束会自动建立一个唯一的索引。约束会自动建立一个唯一的索引。同一个字段既可以在其上定义为同一个字段既可以在其上定义为not nullnot null也可以建立也可以建立uniqueunique约束。约束。注意:如果在一个字段仅定义了注意:如果在一个字段仅定义了uniqueunique约束,则该字段可以包含约束,则该字段可以包含多个空值。多个空值。3.primary key3.primary key:定义为:定义为primary keyprimary key的字段或字段组中不能包含的字段或字段组中不能包含重复值,并且不能为重复值,并且不能

28、为nullnull值(即满足唯一性,不能为空)。在一值(即满足唯一性,不能为空)。在一个表中只能定义一个个表中只能定义一个primary keyprimary key的约束。的约束。oracleoracle会自动为具有会自动为具有primary keyprimary key约束的字段添加一个唯一的索引,以及一个约束的字段添加一个唯一的索引,以及一个not nullnot null约束。约束。4.foreign key4.foreign key:被定义了:被定义了foreign keyforeign key约束的字段的取值只能为相约束的字段的取值只能为相关表中引用的字段的值或关表中引用的字段的值

29、或nullnull值。值。foreign keyforeign key约束既可以在列级约束既可以在列级定义定义, ,也可以在表级定义。定义了也可以在表级定义。定义了foreign keyforeign key约束的外键字段和约束的外键字段和被引用的主键字段可以在同一张表中被引用的主键字段可以在同一张表中, ,这种情况称为这种情况称为: :自引自引用用( (构成了自关联关系构成了自关联关系) )。对于同一个字段可以同时定义为。对于同一个字段可以同时定义为foreign keyforeign key约束和约束和not nullnot null约束。约束。5.check5.check:是所有约束中最

30、灵活的约束,也是最复杂的约:是所有约束中最灵活的约束,也是最复杂的约束束,check,check约束检查输入到表中的数据值来维护域的完整约束检查输入到表中的数据值来维护域的完整性性, ,即检查输入的每一个数据,只有符合条件的数据才允即检查输入的每一个数据,只有符合条件的数据才允许输入到表中许输入到表中.check.check约束有如下特点:约束有如下特点:在在checkcheck约束的表达式中约束的表达式中, ,必须引用表中一个或多个字段必须引用表中一个或多个字段, ,并且表达式的运算结果必须是一个布尔值。并且表达式的运算结果必须是一个布尔值。CheckCheck约束即可以在列级定义约束即可以

31、在列级定义, ,也可以在表级定义。也可以在表级定义。对于同一个字段可以定义多个对于同一个字段可以定义多个checkcheck约束约束, ,而且对于同一而且对于同一个字段可以定义个字段可以定义checkcheck约束和约束和not nullnot null约束。约束。列级约束:列级约束:包含在列定义中,直接跟在该列的其它定义包含在列定义中,直接跟在该列的其它定义之后之后 ,用空格分隔;不必指定列名,用空格分隔;不必指定列名 。表表级约束:级约束:与列定义相互独立,不包含在列定义中;与与列定义相互独立,不包含在列定义中;与定义用定义用,分隔;必须指出要约束的列的名称。分隔;必须指出要约束的列的名称

32、。列列级约束是行定义的一部分级约束是行定义的一部分 ,只能应用于一列上。,只能应用于一列上。表表级约束是独立于列的定义,可以用于一个表的多列上级约束是独立于列的定义,可以用于一个表的多列上。 create table employee2(create table employee2( emp_id number(4), emp_id number(4), name varchar2(15), name varchar2(15), dept_id number(2), dept_id number(2), constraint pk_employee primary key (emp_id) c

33、onstraint pk_employee primary key (emp_id) ); ); -表级约束举例表级约束举例第第37题解析题解析(C):序列序列是所有对象共同使用的是所有对象共同使用的假如假如有有A A和和B B两张表两张表如果如果A A表插入一条数据调用了一次序列对象表插入一条数据调用了一次序列对象 ,那,那么此序列对象当前值变成了么此序列对象当前值变成了1 1当当B B表插入数据时仍然调用相同序列对象表插入数据时仍然调用相同序列对象 ,那么,那么此序列对象的值就会变成此序列对象的值就会变成2 2 这样造成的结果就是这样造成的结果就是 两张表中的序列值都不是连两张表中的序列值

34、都不是连续的续的第第41题解析题解析(A): 示例示例 1 1 下面的代码利用下面的代码利用getStringgetString方法获取指定列值。方法获取指定列值。 Connection conn = / Connection conn = /省略部分代码省略部分代码 String sql = SELECT username,pwd FROM myTable; / String sql = SELECT username,pwd FROM myTable; /定义查询定义查询SQLSQL语句语句 Statement st = conn.createStatement(); Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(sql); ResultSet rs = st.executeQuery(sql); while(rs.next() while(rs.next() System.out.println(rs.getString(1); / System.out.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论