【核心語句】
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
