更新時間:2021-02-24 17:32:02 來源:動力節點 瀏覽1422次
JDBC提供了諸如查詢和更新數據庫中數據的方法,本質上是用來規范訪問數據庫的應用程序接口。總的來說,JDBC在數據庫中有著不容忽視的地位,需要我們花費足夠的時間去學習,無論是在求職面試還是學習中都需要重視。下面為大家介紹8道經典JDBC面試題。
1、JDBC操作數據庫的步驟 ?
1)注冊數據庫驅動。
2)建立數據庫連接。
3)創建一個Statement。
4)執行SQL語句。
5)處理結果集。
6)關閉數據庫連接
2、JDBC中的Statement 和PreparedStatement,CallableStatement的區別?
區別:
1)PreparedStatement是預編譯的SQL語句,效率高于Statement。
2)PreparedStatement支持?操作符,相對于Statement更加靈活。
3)PreparedStatement可以防止SQL注入,安全性高于Statement。
4)CallableStatement適用于執行存儲過程。
3、說說數據庫連接池工作原理。
JAVA EE服務器啟動時會建立一定數量的池連接,并一直維持不少于此數目的池連接。客戶端程序需要連接時,池驅動程序會返回一個未使用的池連接并將其表記為忙。如果當前沒有空閑連接,池驅動程序就新建一定數量的連接,新建連接的數量有配置參數決定。當使用的池連接調用完成后,池驅動程序將此連接表記為空閑,其他調用就可以使用這個連接。
數據庫連接池的實現方案?
連接池使用集合來進行裝載,返回的Connection是原始Connection的代理,代理Connection的close方法,當調用close方法時,不是真正關連接,而是把它代理的Connection對象放回到連接池中,等待下一次重復利用。具體代碼:
@Override
????public Connection getConnection() throws SQLException {
????????if (list.size() > 0) {
????????????final Connection connection = list.removeFirst();
????????????//看看池的大小
????????????System.out.println(list.size());
????????????//返回一個動態代理對象
????????????return (Connection) Proxy.newProxyInstance(Demo1.class.getClassLoader(), connection.getClass().getInterfaces(), new InvocationHandler() {
????????????????@Override
????????????????public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
????????????????????//如果不是調用close方法,就按照正常的來調用
????????????????????if (!method.getName().equals("close")) {
????????????????????????method.invoke(connection, args);
????????????????????} else {
????????????????????????//進到這里來,說明調用的是close方法
????????????????????????list.add(connection);
????????????????????????//再看看池的大小
????????????????????????System.out.println(list.size());
????????????????????}
????????????????????return null;
????????????????}
????????????});
????????}
????????return null;
}
5、寫出一段JDBC連接本機MySQL數據庫的代碼。
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost/test";
Stirng user='root';
String password='root';
Connection conn = DriverManager.getConnection(url,user,password);
6、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方法。
7、PreparedStatement的缺點是什么,怎么解決這個問題?
PreparedStatement的一個缺點是,我們不能直接用它來執行in條件語句;需要執行IN條件語句的話,下面有一些解決方案:
1)分別進行單條查詢——這樣做性能很差,不推薦。
2)使用存儲過程——這取決于數據庫的實現,不是所有數據庫都支持。
3)動態生成PreparedStatement——這是個好辦法,但是不能享受PreparedStatement的緩存帶來的好處了。
4)在PreparedStatement查詢中使用NULL值——如果你知道輸入變量的最大個數的話,這是個不錯的辦法,擴展一下還可以支持無限參數。
8、JDBC的ResultSet是什么?
在查詢數據庫后會返回一個ResultSet,它就像是查詢結果集的一張數據表。
ResultSet對象維護了一個游標,指向當前的數據行。開始的時候這個游標指向的是第一行。如果調用了ResultSet的next()方法游標會下移一行,如果沒有更多的數據了,next()方法會返回false。可以在for循環中用它來遍歷數據集。
默認的ResultSet是不能更新的,游標也只能往下移。也就是說你只能從第一行到最后一行遍歷一遍。不過也可以創建可以回滾或者可更新的ResultSet。
當生成ResultSet的Statement對象要關閉或者重新執行或是獲取下一個ResultSet的時候,ResultSet對象也會自動關閉。
可以通過ResultSet的getter方法,傳入列名或者從1開始的序號來獲取列數據。
以上就是為大家介紹的8道經典JDBC面試題,當然,JDBC的面試題還有很多,不是僅僅靠這8道題就能完全代表的了,在本站的JDBC教程中還有更多的更加全面的JDBC面試題,有需要的小伙伴可以前去學習,為自己未來的求職面試做下鋪墊。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習