15

テーブルや列が MySQL DB に存在するかどうかを確認する単純な Java コードを作成しようとしています。Java コードを使用してチェックを行うべきですか、それとも SQL クエリ文字列を作成し、それを実行してチェックを行うべきですか?

編集-

@エールルート -

以下に示すように、コードを使用してみました。以下のコードを実行しても、テーブルや列が表示されません。これしか見えない――

Driver Loaded.
Got Connection.

私のDBには、多くのDB、テーブル、および列があります。このプログラムが正常に動作する理由がわかりません。

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

    public class Tester {
  static Connection conn;
  static Statement st;
  public static void main(String[] args) throws Exception {
    try {
  // Step 1: Load the JDBC driver.
  System.out.println("Driver Loaded.");
  // Step 2: Establish the connection to the database.
  String url = "jdbc:mysql://localhost:3306/";

  conn = DriverManager.getConnection(url, "cowboy", "123456");
  System.out.println("Got Connection.");

  st = conn.createStatement();
} catch (Exception e) {
  System.err.println("Got an exception! ");
  e.printStackTrace();
  System.exit(0);
}

DatabaseMetaData md2 = conn.getMetaData();
ResultSet rsTables = md2.getColumns(null, null, "customers", "name");
 if (rsTables.next()) {
      System.out.println("Exists !");
    }
  }

}
4

4 に答える 4

36

テーブルが存在するかどうかを確認するには、次のようにDatabaseMetaDataを使用できます。

DatabaseMetaData md = connection.getMetaData();
ResultSet rs = md.getTables(null, null, "table_name", null);
if (rs.next()) {
  //Table Exist
}

列が存在するかどうかを確認するには、同様の方法で使用できます。

DatabaseMetaData md = connection.getMetaData();
ResultSet rs = md.getColumns(null, null, "table_name", "column_name");
 if (rs.next()) {
      //Column in table exist
    }
于 2012-07-28T08:23:39.487 に答える
1
SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA='table_schema'
  AND TABLE_NAME='table_name' 
  AND COLUMN_NAME='column_name'

この sql が何も返さない場合 - 列が存在しません。このクエリは Java 側で実行できますが、これは使用するもの (JPA、JDBC、JDBCTemplate) によって異なります。

于 2012-07-28T07:48:02.790 に答える
0

次の SQL ステートメントを (MySQL で) 使用して、テーブルから実際に列を選択できることを知っています。

show columns from TABLE_NAME where field = 'FIELD_NAME';

次のようなことができます:

...
PreparedStatement preparedStatement =
  connection.prepareStatement(
    "show columns from [TABLE_NAME] where field = ?");
preparedStatement.setString(1, columName);

ResultSet resultSet = preparedStatement.executeQuery();

if (resultSet.next()) {
    System.out.println("column exists!");
} else {
    System.out.println("column doesn't exists!");
}
...
于 2012-07-28T07:45:12.030 に答える
0

Apache Derby (SQL) の場合

たとえば、列が存在するかどうかを確認します。

SELECT ss.SCHEMANAME, st.TABLENAME, sc.COLUMNNAME FROM SYS.SYSSCHEMAS ss
INNER JOIN SYS.SYSTABLES st ON st.SCHEMAID = ss.SCHEMAID AND st.TABLENAME = <YOUR TABLE NAME>
INNER JOIN SYS.SYSCOLUMNS sc ON sc.REFERENCEID = st.TABLEID AND sc.COLUMNNAME = <YOUR COLUMN NAME>
WHERE ss.SCHEMANAME = <YOUR SCHEMA>
于 2017-03-21T22:15:45.460 に答える