【JDBC】利用Connection的Metadata取得一個數據庫連接下的所有表


【核心語句】

DatabaseMetaData metaData = conn.getMetaData();
ResultSet tables = metaData.getTables(null, null, "EMP%", new String[]{"TABLE"});

第一句沒啥花樣,第二句中有四個參數,第一個是Catalog,第二個是schemaPattern,第三個是tablePattern,第四個就是類型,可以選VIEW和TABLE。

第二句代碼中tablePattern如果設置為空,那么出來的表就太多了,至少對於我剛安裝不久的Oracle11g來說是如此,於是我用EMP%限制了一下,於是只剩下以EMP開頭的表。

schemaPattern應該也是一樣的道理,Catalog不知道該怎么設置,留待日后探索吧!您要是知道請留言賜教。

【代碼】

package com.hy.lab;

import java.sql.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 此類用於找出Connection下的所有表
 */
public class TablesFinder {
    //-- 以下為連接Oracle數據庫的四大參數
    private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
    private static final String URL = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
    private static final String USER = "luna";
    private static final String PSWD = "1234";

    public void printTables(){
        Connection conn = null;

        try{
            Class.forName(DRIVER);
            conn = DriverManager.getConnection(URL, USER, PSWD);

            List<String> ls=getTables(conn);
            Collections.sort(ls);
            ls.stream().forEach(table -> System.out.println(table));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    private List<String> getTables(Connection conn) throws Exception{
        List<String> ls=new ArrayList<>();

        DatabaseMetaData metaData = conn.getMetaData();
        ResultSet tables = metaData.getTables(null, null, "EMP%", new String[]{"TABLE"});
        while (tables.next()) {
            String tableName = tables.getString(3);
            ls.add(tableName);
        }

        return ls;
    }

    public static void main(String[] args){
        TablesFinder tf=new TablesFinder();
        tf.printTables();
    }
}

【運行結果】


EMP
EMPLOYEES
EMP_0322
EMP_30
EMP_FROM
EMP_FROM_10
EMP_FROM_10_317
EMP_FROM_11_0322
EMP_TEST
EMP_TO
EMP_TO_10
EMP_TO_10_0317
EMP_TO_10_0322

【參考資料】

https://blog.csdn.net/github_34793283/article/details/114109394

https://blog.csdn.net/successfulroof/article/details/83973595

END


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM