Как я могу обнаружить существование таблицы SQL в Java?

Как определить, существует ли определенная таблица в данной базе данных SQL в Java?

Ответ 1

Вы можете использовать DatabaseMetaData.getTables(), чтобы получить информацию о существующих таблицах.

Этот метод работает прозрачно и не зависит от механизма базы данных. Я думаю, что он запрашивает таблицы схемы данных за кулисами.

Edit:

Вот пример, который печатает все существующие имена таблиц.

DatabaseMetaData md = connection.getMetaData();
ResultSet rs = md.getTables(null, null, "%", null);
while (rs.next()) {
  System.out.println(rs.getString(3));
}

Ответ 2

Используйте java.sql.DatabaseMetaData.getTables(null, null, YOUR_TABLE, null). Если таблица существует, вы получите ResultSet с одной записью.

См. DatabaseMetaData.getTables

Ответ 3

Напишите запрос, который запрашивает таблицу/представление, которое будет отображать таблицы (это зависит от поставщика БД). Вызовите это из Java.

Googling information_schema.tables поможет многое.

Ответ 4

Это не специфическая для языка, а специфичная для конкретной базы данных проблема. Вы запросили метаданные в базе данных для существования этого конкретного объекта.

В SQL Server, например:

SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[table]')
   AND type in (N'U')

Ответ 5

Почему бы просто не увидеть, находится ли он в sysobjects (для SQL Server)?

SELECT [name] FROM [sysobjects] WHERE type = 'U' AND [name] = 'TableName'

Ответ 7

Для ВСЕХ ANSI-совместимых баз данных: (mySQL, SQL Server 2005/2008, Oracle, PostgreSQL, SQLLite, возможно, другие)

select 1 from information_schema.tables where table_name = @tableName

Ответ 8

Я пытаюсь сделать это против Amazon RDS (работает MySql), а решения, размещенные здесь, не работают. Все просто возвращает пустой ResultSet.

Единственное, что мне удалось получить, это:

Connection connection = DriverManager.getConnection(DatabaseUrl, DatabaseUserName, DatabasePassword);
PreparedStatement s = connection.prepareStatement("use mySampleDatabase;");     
s.execute();

PreparedStatement s2 = connection.prepareStatement("Show Tables;");
ResultSet rs = s2.executeQuery();

while (rs.next()) {
    System.out.println(rs.getString(1));
}

Я не уверен, что проблемы с другими решениями в этом потоке уникальны для RDS, или что-то вроде JDBC, который ускользает от меня.

Ответ 9

В зависимости от БД вы можете сделать (MySQL)

SHOW TABLES

или (Oracle)

SELECT * FROM user_objects WHERE object_type = 'TABLE'

или другое для SQL Server. Циклируйте результаты для MySQL или дополнительно фильтруйте на Oracle один.

Ответ 10

Для доступа к MS:

Select Count(*) From MSysObjects 
Where type=1 And name='your_table_name_here'