首頁  >  文章  >  Java  >  java高頻率基礎面試題-(五)

java高頻率基礎面試題-(五)

王林
王林轉載
2020-09-03 16:24:051924瀏覽

java高頻率基礎面試題-(五)

1、JDBC存取資料庫的基本步驟是什麼?

(更多面試題推薦:java面試題目及答案

載入驅動程式

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

#透過連線物件取得會話

透過會話進行資料的增刪改查,封裝物件

#關閉資源

2、說preparedStatement和Statement的差異

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

安全性:可以有效的避免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 部分沒有起到對資料篩選的作用。

3、說說事務的概念,在JDBC程式設計中處理交易的步驟

交易是作為單一邏輯工作單元執行的一系列操作。

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

事務處理步驟:

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

conn.commit()提交交易

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

4、資料庫連線池的原理。為什麼要使用連線池。

資料庫連線是一件費時的操作,連線池可以讓多個操作共用一個連線。

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

使用連接池是為了提高對資料庫連接資源的管理

(相關推薦:java入門教學

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

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

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

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

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

7、JDBC的DriverManager是用來做什麼的?

JDBC的DriverManager是一個工廠類,我們透過它來建立資料庫連線。當JDBC的Driver類別被載入進來時,它會自己註冊到DriverManager類別裡面

然後我們會把資料庫設定資訊傳遞到DriverManager.getConnection()方法,DriverManager會使用註冊到它裡面的驅動程式來取得資料庫連接,並傳回給呼叫的程式。

8、execute,executeQuery,executeUpdate的差別是什麼?

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

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

Statement的executeUpdate(String query)方法用来执行insert或者update/delete(DML)语句,或者 什么也不返回,对于DDL语句,返回值是int类型,如果是DML语句的话,它就是更新的条数,如果是DDL的话,就返回0。 

只有当你不确定是什么语句的时候才应该使用execute()方法,否则应该使用executeQuery或者executeUpdate方法。

9、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;

(视频教程推荐:java课程

10、JDBC的ResultSet是什么?

在查询数据库后会返回一个ResultSet,它就像是查询结果集的一张数据表。

ResultSet对象维护了一个游标,指向当前的数据行。开始的时候这个游标指向的是第一行。如果调用了ResultSet的next()方法游标会下移一行,如果没有更多的数据了,next()方法会返回false。可以在for循环中用它来遍历数据集。

默认的ResultSet是不能更新的,游标也只能往下移。也就是说你只能从第一行到最后一行遍历一遍。不过也可以创建可以回滚或者可更新的ResultSet。

当生成ResultSet的Statement对象要关闭或者重新执行或是获取下一个ResultSet的时候,ResultSet对象也会自动关闭。
可以通过ResultSet的getter方法,传入列名或者从1开始的序号来获取列数据。

以上是java高頻率基礎面試題-(五)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除