web-dev-qa-db-ja.com

JavaでSQLテーブルの存在を検出するにはどうすればよいですか?

Javaの特定のSQLデータベースに特定のテーブルが存在するかどうかをどのように検出できますか?

32
soldier.moth

DatabaseMetaData.getTables() を使用して、既存のテーブルに関する情報を取得できます。

この方法は透過的に機能し、データベースエンジンから独立しています。裏で情報スキーマテーブルをクエリすると思います。

編集:

これが 既存のすべてのテーブル名を出力する例 です。

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

Java.sql.DatabaseMetaData.getTables(null, null, YOUR_TABLE, null)を使用します。テーブルが存在する場合、1つのレコードを持つResultSetを取得します。

DatabaseMetaData.getTables を参照してください

13
adrian.tarau

すべてのANSI準拠データベース:(mySQL、SQL Server 2005/2008、Oracle、PostgreSQL、SQLLite、その他)

select 1 from information_schema.tables where table_name = @tableName
1

これは言語固有ではなく、データベース固有の問題です。その特定のオブジェクトの存在について、データベースのメタデータをクエリします。

たとえばSQL Serverの場合:

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

テーブルを一覧表示するテーブル/ビューをクエリするクエリを記述します(これはDBベンダーによって異なります)。 Javaから呼び出します。

グーグル information_schema.tables は非常に役立ちます。

1
RichardOD

(SQL Serverの)sysobjectsにあるかどうかを確認しないのはなぜですか?

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

JDBC機能があり、データベースベンダーに依存しません-[Java.sql.DatabaseMetaData#getTables()] [1]を参照してください

Java.sql.Connection#getMetaData() を呼び出すことにより、DatabaseMetaDataインスタンスを取得できます。

[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
Swiety

DBに応じて、次のことができます(MySQL)

SHOW TABLES

または(Oracle)

SELECT * FROM user_objects WHERE object_type = 'TABLE'

またはSQL Serverの別のもの。 MySQLの結果を循環するか、Oracleの結果をさらにフィルターします。

0

MS Accessの場合:

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