1

特定の「テーブル名」を持つテーブルが Java プログラムからデータベースに存在するかどうかを確認する必要があります。

データベースのタイプが異なる場合があります。MS SQL サーバー、オラクル、DB2。データベースへの接続オブジェクトがあります。すべての種類のデータベースで機能する単一の方法はありますか? より多くの db 型をサポートするために Java プログラムを拡張する必要があるかもしれないため、すべての DB 型に対する単一のアプローチが非常に役立ちます。

私が使用しているコード。これは、SQL Server データベースに対して正しく動作するように見えますが、Oracle または DB2 でテーブルを見つけられません。

DatabaseMetaData meta = conn.getMetaData(); 
ResultSet res = meta.getTables(null, null, "TABLE_NAME", null); 
if(!res.next()){ 
  //table does not exist. 
} else{
   //table exists. 
}
4

3 に答える 3

3

DatabaseMetaData.getTables()プロシージャを使用して、特定のパターンを持つテーブルをデータベースから検索できます。正確な名前を検索すると、空のテーブルが表示されるResultSetResultSet、テーブルが存在することを示す単一の行が表示されます。

これは、テーブルが現在のユーザーまたは別のユーザーによって所有されているかどうかに関係なく、Oracle データベースに対して機能します。

import java.sql.*;
import oracle.jdbc.*;
public class TableExists
{
 public static String exists(String tableName)
     throws SQLException
 {
    Connection       conn = new OracleDriver().defaultConnection();
    DatabaseMetaData meta = conn.getMetaData(); 
    ResultSet res = meta.getTables(null, null, tableName, null); 
    if(!res.next()){ 
      return "Nope";
    } else{
      return "Yup";
    }
 }
}
于 2012-10-15T09:34:20.727 に答える
2

getTables()の方法を試すことができますDatabaseMetaData

于 2012-10-15T09:35:40.590 に答える
1

非常に単純化:

SELECT
    1
FROM
    TABLE
;

例外がスローされた場合、テーブルは存在しません (または他の何かが間違っています)。さもないと:

http://docs.oracle.com/javase/6/docs/api/java/sql/DatabaseMetaData.html#getTables(java.lang.String , java.lang.String, java.lang.String, java.lang.弦[])

于 2012-10-15T09:37:15.573 に答える