java小知識(shí)之查詢(xún)數(shù)據(jù)庫(kù)數(shù)據(jù)的元信息
簡(jiǎn)介
java中數(shù)據(jù)庫(kù)的操作相信大家都不陌生,JDK提供了java.sql包來(lái)規(guī)范對(duì)數(shù)據(jù)庫(kù)的各種操作。我們最常用的操作就是從數(shù)據(jù)庫(kù)的ResultSet中獲取數(shù)據(jù),其實(shí)這個(gè)包中還有一個(gè)非常有用的類(lèi)叫做ResultSetMetaData,可以通過(guò)這個(gè)類(lèi)來(lái)獲取查詢(xún)數(shù)據(jù)的元信息,一起來(lái)看看吧。
使用ResultSet
java.sql.ResultSet是一個(gè)通用的規(guī)范,用來(lái)表示從數(shù)據(jù)庫(kù)獲取到的數(shù)據(jù)。
通常來(lái)說(shuō),我們通過(guò)connection來(lái)創(chuàng)建Statement,然后通過(guò)執(zhí)行查詢(xún)語(yǔ)句來(lái)得到:
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");
resultSet提供了各種getter方法,來(lái)獲取結(jié)果集中的各種數(shù)據(jù)??梢酝ㄟ^(guò)index,也可以通過(guò)column名稱(chēng)來(lái)獲取。
當(dāng)然,使用index它的效率會(huì)更高,index是從1開(kāi)始的。如果是通過(guò)列名來(lái)獲取數(shù)據(jù),傳入的列名是大小寫(xiě)不敏感的,如果結(jié)果數(shù)據(jù)中有多個(gè)匹配的類(lèi),則會(huì)返回最先匹配的那一列。
在get的過(guò)程中,JDBC driver會(huì)嘗試將結(jié)果數(shù)據(jù)的數(shù)據(jù)庫(kù)類(lèi)型轉(zhuǎn)換成為對(duì)應(yīng)的java類(lèi)型。
JDBC 2.0 API,ResultSet也可以進(jìn)行更新和插入操作,可能我們很少這樣做,一般都是先構(gòu)造好數(shù)據(jù)后直接插入。
先看下更新操作:
rs.absolute(5); // 將游標(biāo)移動(dòng)到第5行
rs.updateString("SITE", "www.flydean.com"); // 將SITE更新為www.flydean.com
rs.updateRow(); // 更新到數(shù)據(jù)庫(kù)中
再看下插入操作:
rs.moveToInsertRow(); // 將游標(biāo)移動(dòng)到插入行
rs.updateString(1, "www.flydean.com"); // 將插入行的第一列更新為www.flydean.com
rs.updateInt(2,35); // 更新第二列為35
rs.updateBoolean(3, true); // 更新第三列為true
rs.insertRow();
rs.moveToCurrentRow();
使用ResultSetMetaData
有了ResultSet,我們可以通過(guò)它的getMetaData方法,來(lái)獲取結(jié)果集的元數(shù)據(jù)。
什么是元數(shù)據(jù)呢?元數(shù)據(jù)又叫做Metadata,是用來(lái)描述數(shù)據(jù)屬性的數(shù)據(jù)。
ResultSetMetaData getMetaData() throws SQLException;
舉個(gè)具體的例子:
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
boolean b = rsmd.isSearchable(1);
ResultSetMetaData提供了很多非常有用的元數(shù)據(jù)檢測(cè)方法:

我們可以拿到列的名稱(chēng)、類(lèi)型、字段長(zhǎng)度、是否為空等很多有意義的數(shù)據(jù)。
這個(gè)元數(shù)據(jù)有什么用呢?
通過(guò)元數(shù)據(jù),我們可以拿到數(shù)據(jù)庫(kù)的描述文件,從而可以自動(dòng)創(chuàng)建對(duì)應(yīng)的數(shù)據(jù)庫(kù)表格的映射關(guān)系,從而減少手動(dòng)代碼的輸入,非常的方便。
用過(guò)MybatisPlus的朋友可能知道,它提供了一個(gè)AutoGenerator,可以自動(dòng)生成mapper對(duì)象和對(duì)應(yīng)的xml文件,非常好用,大家可以試一試。
總結(jié)
以上就是ResultSet和ResultSetMetaData的介紹,大家學(xué)會(huì)了嗎?
到此這篇關(guān)于java小知識(shí)之查詢(xún)數(shù)據(jù)庫(kù)數(shù)據(jù)元信息的文章就介紹到這了,更多相關(guān)java查詢(xún)數(shù)據(jù)庫(kù)數(shù)據(jù)元信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java8 forEach結(jié)合Lambda表達(dá)式遍歷 List操作
這篇文章主要介紹了java8 forEach結(jié)合Lambda表達(dá)式遍歷 List操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):算法
這篇文章主要介紹了Java的數(shù)據(jù)解構(gòu)基礎(chǔ),希望對(duì)廣大的程序愛(ài)好者有所幫助,同時(shí)祝大家有一個(gè)好成績(jī),需要的朋友可以參考下,希望能給你帶來(lái)幫助2021-07-07
Apache?Maven3.6.0的下載安裝和環(huán)境配置(圖文教程)
本文主要介紹了Apache?Maven3.6.0的下載安裝和環(huán)境配置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
解析java稀疏數(shù)組如何幫助我們節(jié)省內(nèi)存提升性能
這篇文章主要為大家介紹了java稀疏數(shù)組如何幫助我們節(jié)省內(nèi)存提升性能解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
Mybatis控制臺(tái)打印SQL執(zhí)行信息的方法詳解
SQL性能監(jiān)控是一個(gè)程序必要的功能,通常我們可以使用數(shù)據(jù)庫(kù)自帶的客戶(hù)端工具進(jìn)行SQL性能分析,本章節(jié)只實(shí)現(xiàn)Mybatis執(zhí)行時(shí)對(duì)執(zhí)行SQL進(jìn)行攔截,控制臺(tái)打印執(zhí)行SQL包括參數(shù)、執(zhí)行方法以及執(zhí)行時(shí)間,需要的朋友可以參考下2024-11-11
Spring通過(guò)三級(jí)緩存解決循環(huán)依賴(lài)問(wèn)題的過(guò)程詳解
循環(huán)依賴(lài)指的是在對(duì)象之間存在相互依賴(lài)關(guān)系,形成一個(gè)閉環(huán),導(dǎo)致無(wú)法準(zhǔn)確地完成對(duì)象的創(chuàng)建和初始化,本文主要介紹了Spring通過(guò)三級(jí)緩存解決循環(huán)依賴(lài)的方法,需要的可以參考下2023-10-10
java基礎(chǔ)之標(biāo)簽、按鈕和按鈕事件簡(jiǎn)介
本文給大家?guī)?lái)的是java圖形界面的基礎(chǔ)知識(shí),簡(jiǎn)單介紹了標(biāo)簽、按鈕和按鈕事件,十分的詳細(xì),有需要的小伙伴可以參考下。2015-06-06
Java Comparable和Comparator對(duì)比詳解
這篇文章主要介紹了Java Comparable和Comparator對(duì)比詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11

