Как я могу получить метаданные временных таблиц MySQL в одном соединении в JDBC? - PullRequest
0 голосов
/ 21 января 2011

И снова я обнаружил проблему, с которой не знаю, как бороться. Предположим, у нас есть следующий код тестирования:

private static final String CREATE_TEMPORARY_TABLE =
        "CREATE TEMPORARY TABLE T1 (\n" +
        "\tA FLOAT(4, 1),\n" +
        "\tB FLOAT(5, 2),\n" +
        "\tC FLOAT,\n" +
        "\tD INTEGER\n" +
        ") ENGINE = MEMORY;";

private final String[] SHOW_TABLE_TYPES = new String[] {
        //"TABLE",
        "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM"
};

private void createTemporaryTable(Connection connection) throws SQLException {
    final PreparedStatement statement = connection.prepareStatement(CREATE_TEMPORARY_TABLE);
    statement.execute();
    statement.close();
}

private void showTables(Connection connection) throws SQLException {
    final ResultSet set = connection.getMetaData().getTables(null, null, null, SHOW_TABLE_TYPES);
    while ( set.next() ) {
        out.println(format("%s %s %s %s %s",
                set.getString("TABLE_CAT"),
                set.getString("TABLE_SCHEM"),
                set.getString("TABLE_NAME"),
                set.getString("TABLE_TYPE"),
                set.getString("REMARKS")
        ));
    }
    set.close();
}

@Override
public void test(Connection connection) throws SQLException {
    createTemporaryTable(connection);
    showTables(connection);
}

Ожидаемый результат - запись метаданных таблицы T1 в поток out. Но ничего не происходит, и, похоже, getTables() не учитывает временные таблицы. Не знаю, как я могу это решить ... Есть ли обходной путь? Ваша помощь действительно очень ценится. Заранее большое спасибо.

1 Ответ

0 голосов
/ 22 января 2011

MySQL иногда не обеспечивает поддержку даже для глупых вещей. Нет решения для проблемы. Закрыто.

...