首頁 >Java >Java面試題 >javaweb面試題目(2)

javaweb面試題目(2)

(*-*)浩
(*-*)浩原創
2019-12-06 15:02:512240瀏覽

javaweb面試題目(2)

JDBC存取資料庫的基本步驟是什麼?                  (建議學習:java訪談題目

1,載入驅動程式

2,透過DriverManager物件取得連接物件Connection

3,請執行檔

2,透過DriverManager物件取得連線物件Connection

#3,透過連線物件取得會話

4,透過會話進行資料的增刪改查,封裝物件#5,關閉資源

說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 部分沒有起到對資料篩選的作用。

說事務的概念,在JDBC程式設計中處理事務的步驟。

#1事務是作為單一邏輯工作單元執行的一系列操作。2,一個邏輯工作單元必須有四個屬性,稱為原子性、一致性、隔離性和持久性(ACID) 屬性,只有這樣才能成為一個交易

交易處理步驟:

3,conn.setAutoComit(false);設定提交方式為手動提交

4, conn.commit()提交交易5,出現異常,回滾conn.rollback();

資料庫連接池的原理,為什麼要使用連接池?

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

2,資料庫連接池的基本概念就是為資料庫連接建立一個「緩衝池」。預先在緩衝池中放入一定數量的連接,當需要建立資料庫連接時,只需從「緩衝池」中取出一個,使用完畢之後再放回去。

我們可以透過設定連接池最大連接數來防止系統無盡的與資料庫連接。更為重要的是我們可以透過連接池的管理機制監視資料庫的連接的數量、使用情況,為系統開發,測試及效能調整提供依據。3,使用連線池是為了提高對資料庫連線資源的管理

JDBC的髒讀是什麼?哪一種資料庫隔離等級能防止髒讀?

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

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

幻讀是指一個交易多次執行一條查詢回傳的卻是不同的值。假設一個事務正根據某個條件進行資料查詢,然後另一個事務插入了一行滿足這個查詢條件的資料。

之後這個交易又執行了這條查詢,傳回的結果集中會包含剛插入的那條新資料。這行新資料稱為幻行,而這種現象就叫做幻讀。

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

JDBC的DriverManager是用來做什麼的?

JDBC的DriverManager是一個工廠類,我們透過它來建立資料庫連線。當JDBC的Driver類別被載入進來時,它會自己註冊到DriverManager類別裡面然後我們會把資料庫設定資訊傳遞到DriverManager.getConnection()方法,DriverManager會使用註冊到它裡面的驅動程式來取得資料庫連接,並傳回給呼叫的程式。

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方法。

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;

JDBC的ResultSet是什麼?

在查詢資料庫後會傳回一個ResultSet,它就像是查詢結果集的資料表。

ResultSet物件維護了一個遊標,指向目前的資料行。開始的時候這個遊標指向的是第一行。如果呼叫了ResultSet的next()方法遊標會下移一行,如果沒有更多的資料了,next()方法會回傳false。可以在for迴圈中用它來遍歷資料集。

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

當產生ResultSet的Statement物件要關閉或重新執行或取得下一個ResultSet的時候,ResultSet物件也會自動關閉。

可以透過ResultSet的getter方法,傳入列名或從1開始的序號來取得列資料。

以上是javaweb面試題目(2)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn