您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Javaweb的面試題有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Javaweb的面試題有哪些”吧!
61,JDBC訪問數(shù)據(jù)庫的基本步驟是什么?
1,加載驅(qū)動
2,通過DriverManager對象獲取連接對象Connection
3,通過連接對象獲取會話
4,通過會話進行數(shù)據(jù)的增刪改查,封裝對象
5,關(guān)閉資源
62,說說preparedStatement和Statement的區(qū)別
1,效率:預(yù)編譯會話比普通會話對象,數(shù)據(jù)庫系統(tǒng)不會對相同的sql語句不會再次編譯
2,安全性:可以有效的避免sql注入攻擊!sql注入攻擊就是從客戶端輸入一些非法的特殊字符,而使服務(wù)器端在構(gòu)造sql語句的時候仍然能夠正確構(gòu)造,從而收集程序和服務(wù)器的信息和數(shù)據(jù)。
比如:“select * from t_user where userName = ‘” + userName + “ ’ and password =’” + password + “’”
如果用戶名和密碼輸入的是’1’ or ‘1’=’1’ ; 則生產(chǎn)的sql語句是:
“select * from t_user where userName = ‘1’ or ‘1’ =’1’ and password =’1’ or ‘1’=’1’ 這個語句中的where 部分沒有起到對數(shù)據(jù)篩選的作用。
63,說說事務(wù)的概念,在JDBC編程中處理事務(wù)的步驟。
1 事務(wù)是作為單個邏輯工作單元執(zhí)行的一系列操作。
2,一個邏輯工作單元必須有四個屬性,稱為原子性、一致性、隔離性和持久性 (ACID) 屬性,只有這樣才能成為一個事務(wù)
事務(wù)處理步驟:
3,conn.setAutoComit(false);設(shè)置提交方式為手工提交
4,conn.commit()提交事務(wù)
5,出現(xiàn)異常,回滾 conn.rollback();
64,數(shù)據(jù)庫連接池的原理。為什么要使用連接池。
1,數(shù)據(jù)庫連接是一件費時的操作,連接池可以使多個操作共享一個連接。
2,數(shù)據(jù)庫連接池的基本思想就是為數(shù)據(jù)庫連接建立一個“緩沖池”。預(yù)先在緩沖池中放入一定數(shù)量的連接,當需要建立數(shù)據(jù)庫連接時,只需從“緩沖池”中取出一個,使用完畢之后再放回去。我們可以通過設(shè)定連接池最大連接數(shù)來防止系統(tǒng)無盡的與數(shù)據(jù)庫連接。更為重要的是我們可以通過連接池的管理機制監(jiān)視數(shù)據(jù)庫的連接的數(shù)量、使用情況,為系統(tǒng)開發(fā),測試及性能調(diào)整提供依據(jù)。
3,使用連接池是為了提高對數(shù)據(jù)庫連接資源的管理
當我們使用事務(wù)時,有可能會出現(xiàn)這樣的情況,有一行數(shù)據(jù)剛更新,與此同時另一個查詢讀到了這個剛更新的值。這樣就導(dǎo)致了臟讀,因為更新的數(shù)據(jù)還沒有進行持久化,更新這行數(shù)據(jù)的業(yè)務(wù)可能會進行回滾,這樣這個數(shù)據(jù)就是無效的。數(shù)據(jù)庫的TRANSACTIONREADCOMMITTED,TRANSACTIONREPEATABLEREAD,和TRANSACTION_SERIALIZABLE隔離級別可以防止臟讀。
幻讀是指一個事務(wù)多次執(zhí)行一條查詢返回的卻是不同的值。假設(shè)一個事務(wù)正根據(jù)某個條件進行數(shù)據(jù)查詢,然后另一個事務(wù)插入了一行滿足這個查詢條件的數(shù)據(jù)。之后這個事務(wù)再次執(zhí)行了這條查詢,返回的結(jié)果集中會包含剛插入的那條新數(shù)據(jù)。這行新數(shù)據(jù)被稱為幻行,而這種現(xiàn)象就叫做幻讀。
只有TRANSACTION_SERIALIZABLE隔離級別才能防止產(chǎn)生幻讀。
67,JDBC的DriverManager是用來做什么的?
JDBC的DriverManager是一個工廠類,我們通過它來創(chuàng)建數(shù)據(jù)庫連接。當JDBC的Driver類被加載進來時,它會自己注冊到DriverManager類里面
然后我們會把數(shù)據(jù)庫配置信息傳成DriverManager.getConnection()方法,DriverManager會使用注冊到它里面的驅(qū)動來獲取數(shù)據(jù)庫連接,并返回給調(diào)用的程序。
68,execute,executeQuery,executeUpdate的區(qū)別是什么?
1,Statement的execute(String query)方法用來執(zhí)行任意的SQL查詢,如果查詢的結(jié)果是一個ResultSet,這個方法就返回true。如果結(jié)果不是ResultSet,比如insert或者update查詢,它就會返回false。我們可以通過它的getResultSet方法來獲取ResultSet,或者通過getUpdateCount()方法來獲取更新的記錄條數(shù)。
2,Statement的executeQuery(String query)接口用來執(zhí)行select查詢,并且返回ResultSet。即使查詢不到記錄返回的ResultSet也不會為null。我們通常使用executeQuery來執(zhí)行查詢語句,這樣的話如果傳進來的是insert或者update語句的話,它會拋出錯誤信息為 “executeQuery method can not be used for update”的java.util.SQLException。 ,
3,Statement的executeUpdate(String query)方法用來執(zhí)行insert或者update/delete(DML)語句,或者 什么也不返回,對于DDL語句,返回值是int類型,如果是DML語句的話,它就是更新的條數(shù),如果是DDL的話,就返回0。
只有當你不確定是什么語句的時候才應(yīng)該使用execute()方法,否則應(yīng)該使用executeQuery或者executeUpdate方法。
69,SQL查詢出來的結(jié)果分頁展示一般怎么做?
Oracle:
select * from
(select *,rownum as tempid from student ) t
where t.tempid between ” + pageSize*(pageNumber-1) + ” and ” + pageSize*pageNumber
MySQL:
select * from students limit ” + pageSize*(pageNumber-1) + “,” + pageSize;
sql server:
select top ” + pageSize + ” * from students where id not in +
(select top ” + pageSize * (pageNumber-1) + id from students order by id) +
“order by id;
70,JDBC的ResultSet是什么?
在查詢數(shù)據(jù)庫后會返回一個ResultSet,它就像是查詢結(jié)果集的一張數(shù)據(jù)表。
ResultSet對象維護了一個游標,指向當前的數(shù)據(jù)行。開始的時候這個游標指向的是第一行。如果調(diào)用了ResultSet的next()方法游標會下移一行,如果沒有更多的數(shù)據(jù)了,next()方法會返回false??梢栽趂or循環(huán)中用它來遍歷數(shù)據(jù)集。
默認的ResultSet是不能更新的,游標也只能往下移。也就是說你只能從第一行到最后一行遍歷一遍。不過也可以創(chuàng)建可以回滾或者可更新的ResultSet
當生成ResultSet的Statement對象要關(guān)閉或者重新執(zhí)行或是獲取下一個ResultSet的時候,ResultSet對象也會自動關(guān)閉。
可以通過ResultSet的getter方法,傳入列名或者從1開始的序號來獲取列數(shù)據(jù)。
到此,相信大家對“Javaweb的面試題有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。