小知識系列:查詢資料庫資料的元資訊

flydean發表於2021-10-13

簡介

java中資料庫的操作相信大家都不陌生,JDK提供了java.sql包來規範對資料庫的各種操作。我們最常用的操作就是從資料庫的ResultSet中獲取資料,其實這個包中還有一個非常有用的類叫做ResultSetMetaData,可以通過這個類來獲取查詢資料的元資訊,一起來看看吧。

使用ResultSet

java.sql.ResultSet是一個通用的規範,用來表示從資料庫獲取到的資料。

通常來說,我們通過connection來建立Statement,然後通過執行查詢語句來得到:

Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                                        ResultSet.CONCUR_UPDATABLE);
         ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");

resultSet提供了各種getter方法,來獲取結果集中的各種資料。可以通過index,也可以通過column名稱來獲取。

當然,使用index它的效率會更高,index是從1開始的。如果是通過列名來獲取資料,傳入的列名是大小寫不敏感的,如果結果資料中有多個匹配的類,則會返回最先匹配的那一列。

在get的過程中,JDBC driver會嘗試將結果資料的資料庫型別轉換成為對應的java型別。

JDBC 2.0 API,ResultSet也可以進行更新和插入操作,可能我們很少這樣做,一般都是先構造好資料後直接插入。

先看下更新操作:

         rs.absolute(5); // 將遊標移動到第5行
         rs.updateString("SITE", "www.flydean.com"); // 將SITE更新為www.flydean.com
         rs.updateRow(); // 更新到資料庫中

再看下插入操作:

  
         rs.moveToInsertRow(); // 將遊標移動到插入行
         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,我們可以通過它的getMetaData方法,來獲取結果集的後設資料。

什麼是後設資料呢?後設資料又叫做Metadata,是用來描述資料屬性的資料。

   ResultSetMetaData getMetaData() throws SQLException;

舉個具體的例子:

       ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");
       ResultSetMetaData rsmd = rs.getMetaData();
       int numberOfColumns = rsmd.getColumnCount();
       boolean b = rsmd.isSearchable(1);

ResultSetMetaData提供了很多非常有用的後設資料檢測方法:

我們可以拿到列的名稱、型別、欄位長度、是否為空等很多有意義的資料。

這個後設資料有什麼用呢?

通過後設資料,我們可以拿到資料庫的描述檔案,從而可以自動建立對應的資料庫表格的對映關係,從而減少手動程式碼的輸入,非常的方便。

用過MybatisPlus的朋友可能知道,它提供了一個AutoGenerator,可以自動生成mapper物件和對應的xml檔案,非常好用,大家可以試一試。

總結

以上就是ResultSet和ResultSetMetaData的介紹,大家學會了嗎?

本文已收錄於 http://www.flydean.com/02-db-resultsetmetadata/

最通俗的解讀,最深刻的乾貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!

歡迎關注我的公眾號:「程式那些事」,懂技術,更懂你!

相關文章