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

Я использовал org.json встроенные методы для правильной печати данных.

JSONObject json = new JSONObject(jsonString); // Convert text to object
System.out.println(json.toString(4)); // Print it with specified indentation

Порядок полей в JSON является случайным для каждого определения. Конкретный порядок зависит от реализации парсера.

30
задан soldier.moth 29 May 2009 в 19:58
поделиться

10 ответов

You can use DatabaseMetaData.getTables() to get information about existing tables.

This method works transparently and is independent of the database engine. I think it queries information schema tables behind the scenes.

Edit:

Here is an example that prints all existing table names.

DatabaseMetaData md = connection.getMetaData();
ResultSet rs = md.getTables(null, null, "%", null);
while (rs.next()) {
  System.out.println(rs.getString(3));
}
39
ответ дан 27 November 2019 в 20:36
поделиться

Это - то, что работало на меня для jdbc:derby:

//Create Staff table if it does not exist yet
String tableName = "STAFF";
boolean exists = conn.getMetaData().getTables(null, null, tableName, null).next();
if(!exists){
    s = conn.createStatement();
    s.execute("create table staff(lastname varchar(30), firstname varchar(30), position varchar(20),salary double,age int)");
    System.out.println("Created table " + tableName);
}

Примечание, что tableName должны быть все заглавные буквы.

1
ответ дан 27 November 2019 в 20:36
поделиться

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

Поиск в Google information_schema.tables очень поможет.

1
ответ дан 27 November 2019 в 20:36
поделиться

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

См. DatabaseMetaData.getTables

13
ответ дан 27 November 2019 в 20:36
поделиться

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

select 1 from information_schema.tables where table_name = @tableName
1
ответ дан 27 November 2019 в 20:36
поделиться

There is a JDBC feature, database vendor independent - see [java.sql.DatabaseMetaData#getTables()][1]

You can get the DatabaseMetaData instance by calling 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[])

1
ответ дан 27 November 2019 в 20:36
поделиться

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

SHOW TABLES

или (Oracle)

SELECT * FROM user_objects WHERE object_type = 'TABLE'

или что-то еще для SQL Server. Прокрутите результаты для MySQL или выполните дальнейшую фильтрацию для Oracle.

1
ответ дан 27 November 2019 в 20:36
поделиться

Why not just see if it is in sysobjects (for SQL Server)?

SELECT [name] FROM [sysobjects] WHERE type = 'U' AND [name] = 'TableName'
1
ответ дан 27 November 2019 в 20:36
поделиться

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

Например, в SQL Server:

SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[table]')
   AND type in (N'U')
1
ответ дан 27 November 2019 в 20:36
поделиться

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

Select Count(*) From MSysObjects 
Where type=1 And name='your_table_name_here'
0
ответ дан 27 November 2019 в 20:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: