2017-01-08 58 views
2

我正嘗試使用Java獲取數據庫中所有表的名稱。使用Java在MS SQL Server中獲取特定數據庫中所有表的表名

這是我正在使用的方法。但是,在運行它時,它還會列出其他表,它們實際上不是我數據庫的一部分,或者可能是我不感興趣的某些系統表。我怎樣才能獲得我創建的表?

/* connecting to database using supplied credentials, and printing out the SQL queries for inserting data to local db */ 
    public void connectToAzure(String connectionString, String databaseName, String username, String password) throws ClassNotFoundException, SQLException 
    { 
     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 

     final Connection m_Connection = DriverManager.getConnection(connectionString+";DatabaseName="+databaseName, username, password); 
     final ArrayList<String> tables = getTableNames(m_Connection); 
    } 

/* helper method to get table names */ 
    public ArrayList<String> getTableNames(final Connection m_Connection) 
    { 
     final ArrayList<String> tables = new ArrayList<>(); 
     try 
     { 
      DatabaseMetaData dbmd = m_Connection.getMetaData(); 
      String[] types = {"TABLE"}; 
      ResultSet rs = dbmd.getTables(null, null, "%", types); 
      while (rs.next()) 
      { 
       String tableName = rs.getString("TABLE_NAME"); 
       tables.add(tableName); 
      } 
     } 
     catch (SQLException e) 
     { 
      e.printStackTrace(); 
     } 

     return tables; 
    } 

輸出上運行上述

table1, table2, table3, table4, table5, table6, trace_xe_action_map, trace_xe_event_map 

在這些中,

trace_xe_action_map, trace_xe_event_map 

不,我已創建的表。

回答

4

您可能需要運行這樣的數據庫上一個簡單的選擇查詢:

select TABLE_NAME from INFORMATION_SCHEMA.TABLES; 

可以使用進一步篩選出table_names where子句這樣的:

SELECT 
    TABLE_NAME 
FROM 
    INFORMATION_SCHEMA.TABLES 
WHERE 
    TABLE_CATALOG = ? AND TABLE_SCHEMA = ?; 
+0

這就是'DatabaseMetaData.getTables'是;在具有SQL標準信息模式的數據庫系統中,這可能是與查詢相同的表,因爲DatabaseMetaData.getTables在信息模式上建模。 –

+0

@GurV,謝謝我使用了下面的內容,並且讓它工作。 select * from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='dbo'; – PepperBoy

+0

這隻對SQL Server有效。只要您的應用程序需要在另一個數據庫上運行,它將無法工作。我建議在JDBC中使用與數據庫無關的方式DataBaseMetaData。 –

2

the Java API Doc

ResultSet getTables(String catalog, 
       String schemaPattern, 
       String tableNamePattern, 
       String[] types) throws SQLException 

既然你只需要一個數據庫的結果,tr y提供'schemaPattern',如下所示:

ResultSet rs = dbmd.getTables(null, 'your-database', "%", types); 

而且你得到你想要的,不多不少。

0

我對Java一無所知,你可以肯定地使用SQL來做那件事。

USE your_DB 
GO 
SELECT t.name AS table_name, 
SCHEMA_NAME(schema_id) AS schema_name, 
c.name AS column_name 
FROM sys.tables AS t 
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
WHERE c.name LIKE '%ticker%' 
ORDER BY schema_name, table_name; 

OR

select * from information_schema.columns 
where table_schema = 'your_DB' 
order by table_name,ordinal_position 
相關問題