Как определить, существует ли определенная таблица в данной базе данных 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
с одной записью.
Ответ 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'
Ответ 6
Существует функция JDBC, независимая от поставщика базы данных - см. [java.sql.DatabaseMetaData # getTables()] [1]
Вы можете получить экземпляр DatabaseMetaData, вызвав java.sql.Connection # getMetaData()
[1]: http://java.sun.com/javase/6/docs/api/java/sql/DatabaseMetaData.html#getTables(java.lang.String, java.lang.String, java.lang.String, java.lang.String [] )
Ответ 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'