Java中ResultSetMetaData 元數(shù)據(jù)的具體使用
1. 前言
ResultSetMetaData 叫元數(shù)據(jù),是數(shù)據(jù)庫 列對象,以列為單位封裝為對象。
元數(shù)據(jù),指的是其包含列名,列值,列類型,列長度等等有用信息。
2. 常用方法介紹
ResultSetMetaData 常用方法:
1). metaData.getColumnName(i) 獲取該列的原始名字
2). metaData.getColumnLabel(i) 獲取該列的別名
3). metaData.getColumnClassName(i) 獲取該列的(在java中的)數(shù)據(jù)類型
4). metaData.getColumnType(i) 獲取該列的(在數(shù)據(jù)庫中的)數(shù)據(jù)類型對應(yīng)的序號
5). metaData.getColumnTypeName(i) 獲取該列的(在數(shù)據(jù)庫中的)數(shù)據(jù)類型
6). metaData.getScale(i) 獲取該列中小數(shù)點(diǎn)右邊的位數(shù)
7). metaData.getColumnDisplaySize(i) 獲取該列的長度
8). metaData.isAutoIncrement(i) 判斷該列的值是否自動遞增
9). metaData.isNullable(i) 判斷該列的值是否為null
10). metaData.getTableName(i) 獲取表名
3. 代碼演示
先準(zhǔn)備好一張表,如下圖:


代碼:
public class Test {
private static final String URL = "jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8";
private static final String USERNAME = "root";
private static final String PASSWORD = "root";
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
// sql 語句 是使用了 別名的
PreparedStatement preparedStatement = connection.prepareStatement("select id as ID, username as USERNAME, birthday as BIRTHDAY, sex as SEX, address as ADDRESS, money as MONEY from user ");
ResultSet resultSet = preparedStatement.executeQuery();
// 獲取元數(shù)據(jù)對象
ResultSetMetaData metaData = resultSet.getMetaData();
// 獲取一共有多少列
int columnCount = metaData.getColumnCount();
// 將數(shù)據(jù)封裝為Map
List<Map<String, Object>> list = new ArrayList<>();
while (resultSet.next()) {
Map<String, Object> columnMap = new HashMap<>();
// 注:列名的索引 起始是 1 不是 0
for (int i = 1; i <= columnCount; i++) {
System.out.println("getColumnName(i): " + metaData.getColumnName(i));
System.out.println("getColumnLabel(i): " + metaData.getColumnLabel(i));
System.out.println("getColumnClassName(i): " + metaData.getColumnClassName(i));
System.out.println("getColumnType(i): " + metaData.getColumnType(i));
System.out.println("getColumnTypeName(i): " + metaData.getColumnTypeName(i));
System.out.println("getScale(i): " + metaData.getScale(i));
System.out.println("isNullable(i): " + metaData.isNullable(i));
System.out.println("isAutoIncrement(i): " + metaData.isAutoIncrement(i));
System.out.println("getTableName(i): " + metaData.getTableName(i));
System.out.println();
String key = metaData.getColumnName(i);
Object value = resultSet.getObject(key);
columnMap.put(key, value);
}
list.add(columnMap);
}
System.out.println();
System.out.println(list);
resultSet.close();
preparedStatement.close();
connection.close();
}
}
4. 結(jié)果圖(一部分)
getColumnName(i): id getColumnLabel(i): ID getColumnClassName(i): java.lang.Integer getColumnType(i): 4 getColumnTypeName(i): INT getScale(i): 0 isNullable(i): 0 isAutoIncrement(i): true // id 自增 因此為true getTableName(i): user getColumnName(i): username getColumnLabel(i): USERNAME getColumnClassName(i): java.lang.String getColumnType(i): 12 getColumnTypeName(i): VARCHAR getScale(i): 0 isNullable(i): 0 isAutoIncrement(i): false getTableName(i): user getColumnName(i): birthday getColumnLabel(i): BIRTHDAY getColumnClassName(i): java.time.LocalDateTime getColumnType(i): 93 getColumnTypeName(i): DATETIME getScale(i): 0 isNullable(i): 1 isAutoIncrement(i): false getTableName(i): user getColumnName(i): sex getColumnLabel(i): SEX getColumnClassName(i): java.lang.String getColumnType(i): 1 getColumnTypeName(i): CHAR getScale(i): 0 isNullable(i): 1 isAutoIncrement(i): false getTableName(i): user getColumnName(i): address getColumnLabel(i): ADDRESS getColumnClassName(i): java.lang.String getColumnType(i): 12 getColumnTypeName(i): VARCHAR getScale(i): 0 isNullable(i): 1 isAutoIncrement(i): false getTableName(i): user getColumnName(i): money getColumnLabel(i): MONEY getColumnClassName(i): java.math.BigDecimal getColumnType(i): 3 getColumnTypeName(i): DECIMAL getScale(i): 3 // 在數(shù)據(jù)庫中該列值是 decimal 且是3位小數(shù) 因此得出 3 isNullable(i): 1 isAutoIncrement(i): false getTableName(i): user
list:結(jié)果:
[
{birthday=2021-02-27T17:47:08, address=北京, money=10.580, sex=男, id=41, username=老王},
{birthday=2021-03-02T15:09:37, address=北京, money=10.580, sex=女, id=42, username=小二王},
{birthday=2021-03-04T11:34:34, address=北京, money=10.580, sex=女, id=43, username=小二王},
{birthday=2021-03-04T12:04:06, address=北京, money=10.580, sex=男, id=45, username=大王},
{birthday=2021-03-07T17:37:26, address=北京, money=10.580, sex=男, id=46, username=老王},
{birthday=2021-03-08T11:44, address=北京, money=10.580, sex=女, id=48, username=小馬},
{birthday=null, address=null, money=null, sex=男, id=50, username=kkooop}
]
5. 源碼
到此這篇關(guān)于Java中ResultSetMetaData 元數(shù)據(jù)的具體使用的文章就介紹到這了,更多相關(guān)ResultSetMetaData 元數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Java的Graphics類進(jìn)行繪圖的方法詳解
這篇文章主要介紹了使用Java的Graphics類進(jìn)行繪圖的方法,是Java的GUI編程的基礎(chǔ),需要的朋友可以參考下2015-10-10
如何使用Java模擬退火算法優(yōu)化Hash函數(shù)
為了解決局部最優(yōu)解問題,1983年,Kirkpatrick等提出了模擬退火算法(SA)能有效的解決局部最優(yōu)解問題。模擬退火算法包含兩個(gè)部分即Metropolis算法和退火過程。Metropolis算法就是如何在局部最優(yōu)解的情況下讓其跳出來,是退火的基礎(chǔ)2021-06-06
spring?Cloud微服務(wù)阿里開源TTL身份信息的線程間復(fù)用
這篇文章主要為大家介紹了spring?Cloud微服務(wù)中使用阿里開源TTL身份信息的線程間復(fù)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Spring Boot使用Spring的異步線程池的實(shí)現(xiàn)
這篇文章主要介紹了Spring Boot使用Spring的異步線程池的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
Springboot注解之@EnableAutoConfiguration詳解
這篇文章主要介紹了Springboot注解之@EnableAutoConfiguration詳解,@EnableAutoConfiguration是一個(gè)加載Starter目錄包之外的需要Spring自動生成bean對象,本文對其進(jìn)行總結(jié),需要的朋友可以參考下2023-08-08

