一、MySql中繼資料
### --- MySql中繼資料
~~~ [mysql中繼資料介紹&相關指令]——[JDBC擷取中繼資料常用類介紹]
~~~ [JDBC擷取資料庫中繼資料資訊]——[JDBC擷取結果集中繼資料資訊]
### --- 什麼是中繼資料
~~~ # 除了表之外的資料都是中繼資料,可以分為三類
——> 查詢結果資訊: UPDATE 或 DELETE語句 受影響的記錄數。
——> 資料庫和資料表的資訊: 包含了資料庫及資料表的結構資訊。
——> MySQL伺服器資訊: 包含了資料庫伺服器的目前狀态,版本号等。
### --- 常用指令
-- 中繼資料相關的指令介紹
-- 1.檢視伺服器目前狀态
-- 2.檢視MySQl的版本資訊
-- 3.查詢表中的詳細資訊
-- 4.顯示資料表的詳細索引資訊
-- 5.列出所有資料庫
-- 6.顯示目前資料庫的所有表
-- 7.擷取目前的資料庫名
~~~ select version(); 擷取mysql伺服器的版本資訊
~~~ show status; 檢視伺服器的狀态資訊
~~~ show columns from table_name; 顯示表的字段資訊等,和desc table_name一樣
~~~ show index from table_name; 顯示資料表的詳細索引資訊,包括PRIMARY KEY(主鍵)
——> show databases:列出所有資料庫
——> show tables : 顯示目前資料庫的所有表
——> select database(): 擷取目前的資料庫名

二、使用JDBC 擷取中繼資料
### --- 使用JDBC 擷取中繼資料
——> 通過JDBC 也可以擷取到中繼資料,比如資料庫的相關資訊,
——> 或者當我們使用程式查詢一個不熟悉的表時, 我們可以通過擷取元素據資訊,
——> 了解表中有多少個字段,字段的名稱 和 字段的類型
### --- 常用類介紹
~~~ # JDBC中描述中繼資料的類
~~~ # 擷取中繼資料對象的方法 : getMetaData ()
——> connection 連接配接對象, 調用 getMetaData () 方法,擷取的是DatabaseMetaData 資料庫中繼資料對象
——> PrepareStatement 預處理對象調用 getMetaData () , 擷取的是ResultSetMetaData , 結果集中繼資料對象
——> DatabaseMetaData的常用方法
中繼資料類 | 作用 |
DatabaseMetaData | 描述資料庫的中繼資料對象 |
ResultSetMetaData | 描述結果集的中繼資料對象 |
方法說明 |
getURL() : 擷取資料庫的URL |
getUserName(): 擷取目前資料庫的使用者名 |
getDatabaseProductName(): 擷取資料庫的産品名稱 |
getDatabaseProductVersion(): 擷取資料的版本号 |
getDriverName(): 傳回驅動程式的名稱 |
isReadOnly(): 判斷資料庫是否隻允許隻讀 true 代表隻讀 |
方法說明:ResultSetMetaData的常用方法 |
getColumnCount() : 目前結果集共有多少列 |
getColumnName(int i) : 擷取指定列号的列名, 參數是整數 從1開始 |
getColumnTypeName(int i): 擷取指定列号列的類型, 參數是整數 從1開始 |
三、代碼示例
public class TestMetaData {
//1.擷取資料庫相關的中繼資料資訊 使用DatabaseMetaData
@Test
public void testDataBaseMetaData() throws SQLException {
//1.擷取資料庫連接配接對象 connection
Connection connection = DruidUtils.getConnection();
//2.擷取代表資料庫的 中繼資料對象 DatabaseMetaData
DatabaseMetaData metaData = connection.getMetaData();
//3.擷取資料庫相關的中繼資料資訊
String url = metaData.getURL();
System.out.println("資料庫URL: " + url);
String userName = metaData.getUserName();
System.out.println("目前使用者: " + userName );
String productName = metaData.getDatabaseProductName();
System.out.println("資料庫産品名: " + productName);
String version = metaData.getDatabaseProductVersion();
System.out.println("資料庫版本: " + version);
String driverName = metaData.getDriverName();
System.out.println("驅動名稱: " + driverName);
//判斷目前資料庫是否隻允許隻讀
boolean b = metaData.isReadOnly(); //如果是 true 就表示 隻讀
if(b){
System.out.println("目前資料庫隻允許讀操作!");
}else{
System.out.println("不是隻讀資料庫");
}
connection.close();
}
//擷取結果集中的中繼資料資訊
@Test
public void testResultSetMetaData() throws SQLException {
//1.擷取連接配接
Connection con = DruidUtils.getConnection();
//2.擷取預處理對象
PreparedStatement ps = con.prepareStatement("select * from employee");
ResultSet resultSet = ps.executeQuery();
//3.擷取結果集元素據對象
ResultSetMetaData metaData = ps.getMetaData();
//1.擷取目前結果集 共有多少列
int count = metaData.getColumnCount();
System.out.println("目前結果集中共有: " + count + " 列");
//2.獲結果集中 列的名稱 和 類型
for (int i = 1; i <= count; i++) {
String columnName = metaData.getColumnName(i);
System.out.println("列名: "+ columnName);
String columnTypeName = metaData.getColumnTypeName(i);
System.out.println("類型: " +columnTypeName);
}
//釋放資源
DruidUtils.close(con,ps,resultSet);
}
}
四、sql語句
package com.yanqi.testmetadata;
import com.yanqi.utils.DruidUtils;
import org.junit.Test;
import java.sql.*;
public class TestMetaData {
//1.擷取資料庫相關的中繼資料資訊 使用DatabaseMetaData
@Test
public void testDataBaseMetaData() throws SQLException {
//1.擷取資料庫連接配接對象 connection
Connection connection = DruidUtils.getConnection();
//2.擷取代表資料庫的 中繼資料對象 DatabaseMetaData
DatabaseMetaData metaData = connection.getMetaData();
//3.擷取資料庫相關的中繼資料資訊
String url = metaData.getURL();
System.out.println("資料庫URL: " + url);
String userName = metaData.getUserName();
System.out.println("目前使用者: " + userName );
String productName = metaData.getDatabaseProductName();
System.out.println("資料庫産品名: " + productName);
String version = metaData.getDatabaseProductVersion();
System.out.println("資料庫版本: " + version);
String driverName = metaData.getDriverName();
System.out.println("驅動名稱: " + driverName);
//判斷目前資料庫是否隻允許隻讀
boolean b = metaData.isReadOnly(); //如果是 true 就表示 隻讀
if(b){
System.out.println("目前資料庫隻允許讀操作!");
}else{
System.out.println("不是隻讀資料庫");
}
connection.close();
}
//擷取結果集中的中繼資料資訊
@Test
public void testResultSetMetaData() throws SQLException {
//1.擷取連接配接
Connection con = DruidUtils.getConnection();
//2.擷取預處理對象
PreparedStatement ps = con.prepareStatement("select * from employee");
ResultSet resultSet = ps.executeQuery();
//3.擷取結果集元素據對象
ResultSetMetaData metaData = ps.getMetaData();
//1.擷取目前結果集 共有多少列
int count = metaData.getColumnCount();
System.out.println("目前結果集中共有: " + count + " 列");
//2.獲結果集中 列的名稱 和 類型
for (int i = 1; i <= count; i++) {
String columnName = metaData.getColumnName(i);
System.out.println("列名: "+ columnName);
String columnTypeName = metaData.getColumnTypeName(i);
System.out.println("類型: " +columnTypeName);
}
//釋放資源
DruidUtils.close(con,ps,resultSet);
}
}
五、列印輸出
D:\JAVA\jdk-11.0.2\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=62503:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath "D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar;D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\plugins\junit\lib\junit5-rt.jar;D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\plugins\junit\lib\junit-rt.jar;E:\NO.Z.10000——javaproject\NO.H.00002.mysql\mysql\out\production\mysql.jdbc_task06;F:\NO.Z.02000——soft——IT.實驗\20210801——Hadoop\20210801.2——Hadoop——第二階段——預科班\預科班第二階段子產品一\05 任務五 (JDBC)\03_軟體\myJar\dom4j-1.6.1.jar;F:\NO.Z.02000——soft——IT.實驗\20210801——Hadoop\20210801.2——Hadoop——第二階段——預科班\預科班第二階段子產品一\05 任務五 (JDBC)\03_軟體\myJar\druid-1.0.9.jar;F:\NO.Z.02000——soft——IT.實驗\20210801——Hadoop\20210801.2——Hadoop——第二階段——預科班\預科班第二階段子產品一\05 任務五 (JDBC)\03_軟體\myJar\c3p0-0.9.5.2.jar;F:\NO.Z.02000——soft——IT.實驗\20210801——Hadoop\20210801.2——Hadoop——第二階段——預科班\預科班第二階段子產品一\05 任務五 (JDBC)\03_軟體\myJar\commons-dbcp-1.4.jar;F:\NO.Z.02000——soft——IT.實驗\20210801——Hadoop\20210801.2——Hadoop——第二階段——預科班\預科班第二階段子產品一\05 任務五 (JDBC)\03_軟體\myJar\jaxen-1.1-beta-6.jar;F:\NO.Z.02000——soft——IT.實驗\20210801——Hadoop\20210801.2——Hadoop——第二階段——預科班\預科班第二階段子產品一\05 任務五 (JDBC)\03_軟體\myJar\commons-pool-1.5.6.jar;F:\NO.Z.02000——soft——IT.實驗\20210801——Hadoop\20210801.2——Hadoop——第二階段——預科班\預科班第二階段子產品一\05 任務五 (JDBC)\03_軟體\myJar\commons-dbutils-1.6.jar;F:\NO.Z.02000——soft——IT.實驗\20210801——Hadoop\20210801.2——Hadoop——第二階段——預科班\預科班第二階段子產品一\05 任務五 (JDBC)\03_軟體\myJar\mchange-commons-java-0.2.12.jar;F:\NO.Z.02000——soft——IT.實驗\20210801——Hadoop\20210801.2——Hadoop——第二階段——預科班\預科班第二階段子產品一\05 任務五 (JDBC)\03_軟體\myJar\mysql-connector-java-5.1.37-bin.jar;C:\Users\Administrator\.m2\repository\org\testng\testng\6.14.3\testng-6.14.3.jar;C:\Users\Administrator\.m2\repository\com\beust\jcommander\1.72\jcommander-1.72.jar;C:\Users\Administrator\.m2\repository\org\apache-extras\beanshell\bsh\2.0b6\bsh-2.0b6.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter\5.4.2\junit-jupiter-5.4.2.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.4.2\junit-jupiter-api-5.4.2.jar;C:\Users\Administrator\.m2\repository\org\apiguardian\apiguardian-api\1.0.0\apiguardian-api-1.0.0.jar;C:\Users\Administrator\.m2\repository\org\opentest4j\opentest4j\1.1.1\opentest4j-1.1.1.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-commons\1.4.2\junit-platform-commons-1.4.2.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.4.2\junit-jupiter-params-5.4.2.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.4.2\junit-jupiter-engine-5.4.2.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-engine\1.4.2\junit-platform-engine-1.4.2.jar;C:\Users\Administrator\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\Administrator\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.yanqi.testmetadata.TestMetaData,testDataBaseMetaData
8月 05, 2021 10:44:52 下午 com.alibaba.druid.pool.DruidDataSource info
資訊: {dataSource-1} inited
資料庫URL: jdbc:mysql://127.0.0.1:3306/db5?characterEncoding=UTF-8
目前使用者: root@localhost
資料庫産品名: MySQL
資料庫版本: 5.7.28-log
驅動名稱: MySQL Connector Java
不是隻讀資料庫
Process finished with exit code 0
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor