簡介
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/
最通俗的解讀,最深刻的干貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!
歡迎關注我的公眾號:「程序那些事」,懂技術,更懂你!