Javaの特定のSQLデータベースに特定のテーブルが存在するかどうかをどのように検出できますか?
DatabaseMetaData.getTables() を使用して、既存のテーブルに関する情報を取得できます。
この方法は透過的に機能し、データベースエンジンから独立しています。裏で情報スキーマテーブルをクエリすると思います。
編集:
これが 既存のすべてのテーブル名を出力する例 です。
DatabaseMetaData md = connection.getMetaData();
ResultSet rs = md.getTables(null, null, "%", null);
while (rs.next()) {
System.out.println(rs.getString(3));
}
Java.sql.DatabaseMetaData.getTables(null, null, YOUR_TABLE, null)
を使用します。テーブルが存在する場合、1つのレコードを持つResultSet
を取得します。
DatabaseMetaData.getTables を参照してください
すべてのANSI準拠データベース:(mySQL、SQL Server 2005/2008、Oracle、PostgreSQL、SQLLite、その他)
select 1 from information_schema.tables where table_name = @tableName
これは言語固有ではなく、データベース固有の問題です。その特定のオブジェクトの存在について、データベースのメタデータをクエリします。
たとえばSQL Serverの場合:
SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[table]')
AND type in (N'U')
テーブルを一覧表示するテーブル/ビューをクエリするクエリを記述します(これはDBベンダーによって異なります)。 Javaから呼び出します。
グーグル information_schema.tables は非常に役立ちます。
(SQL Serverの)sysobjectsにあるかどうかを確認しないのはなぜですか?
SELECT [name] FROM [sysobjects] WHERE type = 'U' AND [name] = 'TableName'
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 [])
DBに応じて、次のことができます(MySQL)
SHOW TABLES
または(Oracle)
SELECT * FROM user_objects WHERE object_type = 'TABLE'
またはSQL Serverの別のもの。 MySQLの結果を循環するか、Oracleの結果をさらにフィルターします。
MS Accessの場合:
Select Count(*) From MSysObjects
Where type=1 And name='your_table_name_here'