Java面試題-javaweb篇七

61,JDBC訪問數據庫的基本步驟是什麼?

1,加載驅動

2,通過DriverManager對象獲取連接對象Connection

3,通過連接對象獲取會話

4,通過會話進行數據的增刪改查,封裝對象

5,關閉資源

62,說說preparedStatement和Statement的區別

1,效率:預編譯會話比普通會話對象,數據庫系統不會對相同的sql語句不會再次編譯

2,安全性:可以有效的避免sql注入攻擊!sql注入攻擊就是從客戶端輸入一些非法的特殊字符,而使服務器端在構造sql語句的時候仍然能夠正確構造,從而收集程序和服務器的信息和數據。

比如:“select * from t_user where userName = ‘” + userName + “ ’ and password =’” + password + “’”

如果用戶名和密碼輸入的是’1’ or ‘1’=’1’ ; 則生產的sql語句是:

“select * from t_user where userName = ‘1’ or ‘1’ =’1’ and password =’1’ or ‘1’=’1’ 這個語句中的where 部分沒有起到對數據篩選的作用。

63,說說事務的概念,在JDBC編程中處理事務的步驟。

1 事務是作爲單個邏輯工作單元執行的一系列操作。

2,一個邏輯工作單元必須有四個屬性,稱爲原子性、一致性、隔離性和持久性 (ACID) 屬性,只有這樣才能成爲一個事務

事務處理步驟:

3,conn.setAutoComit(false);設置提交方式爲手工提交

4,conn.commit()提交事務

5,出現異常,回滾 conn.rollback();

64,數據庫連接池的原理。爲什麼要使用連接池。

1,數據庫連接是一件費時的操作,連接池可以使多個操作共享一個連接。

2,數據庫連接池的基本思想就是爲數據庫連接建立一個“緩衝池”。預先在緩衝池中放入一定數量的連接,當需要建立數據庫連接時,只需從“緩衝池”中取出一個,使用完畢之後再放回去。我們可以通過設定連接池最大連接數來防止系統無盡的與數據庫連接。更爲重要的是我們可以通過連接池的管理機制監視數據庫的連接的數量、使用情況,爲系統開發,測試及性能調整提供依據。

3,使用連接池是爲了提高對數據庫連接資源的管理

65,JDBC的髒讀是什麼?哪種數據庫隔離級別能防止髒讀?

當我們使用事務時,有可能會出現這樣的情況,有一行數據剛更新,與此同時另一個查詢讀到了這個剛更新的值。這樣就導致了髒讀,因爲更新的數據還沒有進行持久化,更新這行數據的業務可能會進行回滾,這樣這個數據就是無效的。數據庫的TRANSACTIONREADCOMMITTEDTRANSACTIONREPEATABLEREAD,和TRANSACTION_SERIALIZABLE隔離級別可以防止髒讀。

66,什麼是幻讀,哪種隔離級別可以防止幻讀?

幻讀是指一個事務多次執行一條查詢返回的卻是不同的值。假設一個事務正根據某個條件進行數據查詢,然後另一個事務插入了一行滿足這個查詢條件的數據。之後這個事務再次執行了這條查詢,返回的結果集中會包含剛插入的那條新數據。這行新數據被稱爲幻行,而這種現象就叫做幻讀。

只有TRANSACTION_SERIALIZABLE隔離級別才能防止產生幻讀。

67,JDBC的DriverManager是用來做什麼的?

JDBC的DriverManager是一個工廠類,我們通過它來創建數據庫連接。當JDBC的Driver類被加載進來時,它會自己註冊到DriverManager類裏面

然後我們會把數據庫配置信息傳成DriverManager.getConnection()方法,DriverManager會使用註冊到它裏面的驅動來獲取數據庫連接,並返回給調用的程序。

68,execute,executeQuery,executeUpdate的區別是什麼?

1,Statement的execute(String query)方法用來執行任意的SQL查詢,如果查詢的結果是一個ResultSet,這個方法就返回true。如果結果不是ResultSet,比如insert或者update查詢,它就會返回false。我們可以通過它的getResultSet方法來獲取ResultSet,或者通過getUpdateCount()方法來獲取更新的記錄條數。

2,Statement的executeQuery(String query)接口用來執行select查詢,並且返回ResultSet。即使查詢不到記錄返回的ResultSet也不會爲null。我們通常使用executeQuery來執行查詢語句,這樣的話如果傳進來的是insert或者update語句的話,它會拋出錯誤信息爲 “executeQuery method can not be used for update”的java.util.SQLException。 ,

3,Statement的executeUpdate(String query)方法用來執行insert或者update/delete(DML)語句,或者 什麼也不返回,對於DDL語句,返回值是int類型,如果是DML語句的話,它就是更新的條數,如果是DDL的話,就返回0。

只有當你不確定是什麼語句的時候才應該使用execute()方法,否則應該使用executeQuery或者executeUpdate方法。

69,SQL查詢出來的結果分頁展示一般怎麼做?

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是什麼?

在查詢數據庫後會返回一個ResultSet,它就像是查詢結果集的一張數據表。

ResultSet對象維護了一個遊標,指向當前的數據行。開始的時候這個遊標指向的是第一行。如果調用了ResultSet的next()方法遊標會下移一行,如果沒有更多的數據了,next()方法會返回false。可以在for循環中用它來遍歷數據集。

默認的ResultSet是不能更新的,遊標也只能往下移。也就是說你只能從第一行到最後一行遍歷一遍。不過也可以創建可以回滾或者可更新的ResultSet

當生成ResultSet的Statement對象要關閉或者重新執行或是獲取下一個ResultSet的時候,ResultSet對象也會自動關閉。

可以通過ResultSet的getter方法,傳入列名或者從1開始的序號來獲取列數據。

歡迎工作一到五年的Java工程師朋友們加入Java架構師:697558955

羣內提供免費的Java架構學習資料(裏面有高可用、高併發、高性能及分佈式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章