コードにMySql、jdbc、javaを使用しています。コードで次のことを確認したい:
1-テーブルが特定のデータベースに存在します。2-特定のデータベースの特定のテーブルに列が存在します。
これを行う方法を教えてもらえますか?
正しい方法は、JDBCメタデータを使用することです
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
DatabaseMetaData metadata = connection.getMetaData();
ResultSet resultSet;
resultSet = metadata.getTables(null, null, "tablename", null);
if(resultSet.next())
// Table exists
resultSet = metadata.getColumns(null, null, "tablename", "columnName");
if(resultSet.next())
// Column exists
コードをデバッグするには、最初にすべてのテーブル名をフェッチして、次のように出力することをお勧めします。
resultSet = metadata.getTables(null, null, "%", null);
while(resultSet.next())
System.out.println(resultSet.getString("TABLE_NAME"));
NB!テーブルがリストされていない場合は、次のバグがある古いバージョンのMySQL JDBCドライバーを使用していますhttp://bugs.mysql.com/bug.php?id=20913アップグレードするか、データベース名を最初の引数として使用する必要があります。 getTables
表を探します。
SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema = 'db_name'
AND table_name = 'table_name';
存在する場合は、列を探します。
SELECT *
FROM information_schema.COLUMNS
WHERE
TABLE_SCHEMA = 'db_name'
AND TABLE_NAME = 'table_name'
AND COLUMN_NAME = 'column_name'
Connection.getMetaData()を使用し、返されたオブジェクトを使用して、カタログ、スキーマ、テーブル、および列を取得します。
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
DatabaseMetaData metadata = connection.getMetaData();
ResultSet resultSet;
resultSet = metadata.getTables(null, null, "tablename", null);
if(resultSet!=null){
// next() checks if the next table exists ...
System.out.println("Table exists");
}