第二次月考題_第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

提交評論