我正嘗試使用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
不,我已創建的表。
這就是'DatabaseMetaData.getTables'是;在具有SQL標準信息模式的數據庫系統中,這可能是與查詢相同的表,因爲DatabaseMetaData.getTables在信息模式上建模。 –
@GurV,謝謝我使用了下面的內容,並且讓它工作。 select * from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA ='dbo'; – PepperBoy
這隻對SQL Server有效。只要您的應用程序需要在另一個數據庫上運行,它將無法工作。我建議在JDBC中使用與數據庫無關的方式DataBaseMetaData。 –