黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 8道經(jīng)典JDBC面試題

8道經(jīng)典JDBC面試題

更新時間:2021-02-24 17:32:02 來源:動力節(jié)點(diǎn) 瀏覽1513次

JDBC提供了諸如查詢和更新數(shù)據(jù)庫中數(shù)據(jù)的方法,本質(zhì)上是用來規(guī)范訪問數(shù)據(jù)庫的應(yīng)用程序接口。總的來說,JDBC在數(shù)據(jù)庫中有著不容忽視的地位,需要我們花費(fèi)足夠的時間去學(xué)習(xí),無論是在求職面試還是學(xué)習(xí)中都需要重視。下面為大家介紹8道經(jīng)典JDBC面試題

1、JDBC操作數(shù)據(jù)庫的步驟 ?

1)注冊數(shù)據(jù)庫驅(qū)動。

2)建立數(shù)據(jù)庫連接。

3)創(chuàng)建一個Statement。

4)執(zhí)行SQL語句。

5)處理結(jié)果集。

6)關(guān)閉數(shù)據(jù)庫連接

2、JDBC中的Statement 和PreparedStatement,CallableStatement的區(qū)別?

區(qū)別:

1)PreparedStatement是預(yù)編譯的SQL語句,效率高于Statement。

2)PreparedStatement支持?操作符,相對于Statement更加靈活。

3)PreparedStatement可以防止SQL注入,安全性高于Statement。

4)CallableStatement適用于執(zhí)行存儲過程。

3、說說數(shù)據(jù)庫連接池工作原理。

JAVA EE服務(wù)器啟動時會建立一定數(shù)量的池連接,并一直維持不少于此數(shù)目的池連接。客戶端程序需要連接時,池驅(qū)動程序會返回一個未使用的池連接并將其表記為忙。如果當(dāng)前沒有空閑連接,池驅(qū)動程序就新建一定數(shù)量的連接,新建連接的數(shù)量有配置參數(shù)決定。當(dāng)使用的池連接調(diào)用完成后,池驅(qū)動程序?qū)⒋诉B接表記為空閑,其他調(diào)用就可以使用這個連接。

  1. 數(shù)據(jù)庫連接池的實(shí)現(xiàn)方案?

連接池使用集合來進(jìn)行裝載,返回的Connection是原始Connection的代理,代理Connection的close方法,當(dāng)調(diào)用close方法時,不是真正關(guān)連接,而是把它代理的Connection對象放回到連接池中,等待下一次重復(fù)利用。具體代碼:

@Override

????public Connection getConnection() throws SQLException {



????????if (list.size() > 0) {

????????????final Connection connection = list.removeFirst();



????????????//看看池的大小

????????????System.out.println(list.size());



????????????//返回一個動態(tài)代理對象

????????????return (Connection) Proxy.newProxyInstance(Demo1.class.getClassLoader(), connection.getClass().getInterfaces(), new InvocationHandler() {



????????????????@Override

????????????????public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {



????????????????????//如果不是調(diào)用close方法,就按照正常的來調(diào)用

????????????????????if (!method.getName().equals("close")) {

????????????????????????method.invoke(connection, args);

????????????????????} else {



????????????????????????//進(jìn)到這里來,說明調(diào)用的是close方法

????????????????????????list.add(connection);



????????????????????????//再看看池的大小

????????????????????????System.out.println(list.size());



????????????????????}

????????????????????return null;

????????????????}



????????????});

????????}

????????return null;

}

5、寫出一段JDBC連接本機(jī)MySQL數(shù)據(jù)庫的代碼。

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的區(qū)別是什么?

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

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

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

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

7、PreparedStatement的缺點(diǎn)是什么,怎么解決這個問題?

PreparedStatement的一個缺點(diǎn)是,我們不能直接用它來執(zhí)行in條件語句;需要執(zhí)行IN條件語句的話,下面有一些解決方案:

1)分別進(jìn)行單條查詢——這樣做性能很差,不推薦。

2)使用存儲過程——這取決于數(shù)據(jù)庫的實(shí)現(xiàn),不是所有數(shù)據(jù)庫都支持。

3)動態(tài)生成PreparedStatement——這是個好辦法,但是不能享受PreparedStatement的緩存帶來的好處了。

4)在PreparedStatement查詢中使用NULL值——如果你知道輸入變量的最大個數(shù)的話,這是個不錯的辦法,擴(kuò)展一下還可以支持無限參數(shù)。

8、JDBC的ResultSet是什么?

在查詢數(shù)據(jù)庫后會返回一個ResultSet,它就像是查詢結(jié)果集的一張數(shù)據(jù)表。

ResultSet對象維護(hù)了一個游標(biāo),指向當(dāng)前的數(shù)據(jù)行。開始的時候這個游標(biāo)指向的是第一行。如果調(diào)用了ResultSet的next()方法游標(biāo)會下移一行,如果沒有更多的數(shù)據(jù)了,next()方法會返回false。可以在for循環(huán)中用它來遍歷數(shù)據(jù)集。

默認(rèn)的ResultSet是不能更新的,游標(biāo)也只能往下移。也就是說你只能從第一行到最后一行遍歷一遍。不過也可以創(chuàng)建可以回滾或者可更新的ResultSet。

當(dāng)生成ResultSet的Statement對象要關(guān)閉或者重新執(zhí)行或是獲取下一個ResultSet的時候,ResultSet對象也會自動關(guān)閉。

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

以上就是為大家介紹的8道經(jīng)典JDBC面試題,當(dāng)然,JDBC的面試題還有很多,不是僅僅靠這8道題就能完全代表的了,在本站的JDBC教程中還有更多的更加全面的JDBC面試題,有需要的小伙伴可以前去學(xué)習(xí),為自己未來的求職面試做下鋪墊。

 

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 人人艹人人插 | 久久精品国产日本波多麻结衣 | 日本一区二区三区在线观看视频 | 爱啪啪网站 | 久久精品国产精品青草不卡 | 日韩中文字幕久久精品 | 久久在现| 国产精品天天看 | 91看片淫黄大片.在线天堂 | 色爱区综合激情五月综合激情 | xxxxx日本护士xxxhd | 日本a在线天堂 | 性欧美高清videofree | 最近韩国日本高清免费观看 | 欧美日韩成人在线观看 | 狠狠干老司机 | 日本免费黄色录像 | 亚洲精品午夜视频 | 狼人香蕉国产在线视频 | 久草视频精品在线 | 国产成在线观看免费视频成本人 | 狠狠色狠狠色综合网 | 国内精自品线一区91 | 999yy成年在线视频免费看 | 精品久久网 | 一区在线观看视频 | 久热精品男人的天堂在线视频 | 午夜体验 | 欧美成人一区二区三区 | 性刺激的欧美三级视频 | 中文一区二区在线观看 | 日日摸日日操 | 91精品免费视频 | 一区二区三区国产 | 国产成人系列 | 国产精品香蕉一区二区三区 | 无遮羞肉体动漫影院免费版 | 毛片手机在线观看 | 日韩午夜高清福利片在线观看 | 国产一区二区视频在线观看 | 久久婷婷午色综合夜啪 |