私が知る限り、MySQL JDBC ドライバーはそれをスキーマではなくカタログと見なします。そのため、getCatalogs
代わりに使用する必要があります (使用する場合は常に、スキーマ パラメーターではなく、カタログ パラメーターを使用する必要があります)。
getSchemas
Connector/Jのメソッドは、常に空の結果セットを返します。
public java.sql.ResultSet getSchemas() throws SQLException {
Field[] fields = new Field[2];
fields[0] = new Field("", "TABLE_SCHEM", java.sql.Types.CHAR, 0);
fields[1] = new Field("", "TABLE_CATALOG", java.sql.Types.CHAR, 0);
ArrayList<ResultSetRow> tuples = new ArrayList<ResultSetRow>();
java.sql.ResultSet results = buildResultSet(fields, tuples);
return results;
}
はのgetCatalogs
結果を返しますSHOW DATABASES
。そして、(カタログ用に)としてエイリアス化された情報スキーマの列と、クエリの列の値として渡されるパラメーターが表示されDatabaseMetaDataUsingInfoSchema
ます。TABLE_SCHEMA
TABLE_CAT
catalog
TABLE_SCHEMA
String sql = "SELECT TABLE_SCHEMA AS TABLE_CAT, NULL AS TABLE_SCHEM, TABLE_NAME,"
+ "COLUMN_NAME, NULL AS GRANTOR, GRANTEE, PRIVILEGE_TYPE AS PRIVILEGE, IS_GRANTABLE FROM INFORMATION_SCHEMA.COLUMN_PRIVILEGES WHERE "
+ "TABLE_SCHEMA LIKE ? AND TABLE_NAME =? AND COLUMN_NAME LIKE ? ORDER BY COLUMN_NAME, PRIVILEGE_TYPE";
java.sql.PreparedStatement pStmt = null;
try {
pStmt = prepareMetaDataSafeStatement(sql);
if (catalog != null) {
pStmt.setString(1, catalog);
} else {
pStmt.setString(1, "%");
}
pStmt.setString(2, table);
pStmt.setString(3, columnNamePattern);