Тестирование, чтобы увидеть, существует ли представление, но мой метод возвращает false - он должен вернуть true - PullRequest
0 голосов
/ 05 января 2020

У меня есть метод viewExists, чтобы проверить, есть ли у меня представление в моей базе данных. В настоящее время я делаю, но мой метод, кажется, не знает этого, так как он продолжает возвращать false.

public static boolean viewExists(Connection conn, String view) throws SQLException {        
        boolean exists = false;
        try {
            ResultSet rs = conn.getMetaData().getTables(null, null, view, new String[] {"VIEW"});
                if (rs.next()) {
                    String name = rs.getString("TABLE_NAME");
                    if (name != null && name.contentEquals(view)) {
                        exists = true;
                    }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return exists;
    }

Весь смысл этого в том, чтобы увидеть, существует ли представление, и если оно существует, я отбрасываю и создайте новый.

Я довольно новичок в JDB C, и поэтому любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 05 января 2020

Как сказано в комментарии Turing86, создание динамической c таблицы в необработанном JDB C, как это ... заново изобретает колесо, и вы, вероятно, не должны этого делать.

Хотя в Имена SQL db нечувствительны к регистру, при работе с метаданными JDB C это не так, и требуемый регистр довольно досадно зависит от механизма БД. Скорее всего, вы хотите «view», а не «VIEW» или «table_name» и не «TABLE_NAME».

Как отдельное примечание, это действительно глупая обработка ошибок; Исключения содержат 4 бита информации (типа, сообщения, трассировки и причины), и вы отбрасываете 3 из 4 фактов, сбрасывая оставшуюся информацию в то место, где она будет заглушена шумом, а затем вы возвращаете неверный ответ. Какой ужас. Просто удалите блок try и добавьте throws SQLException в свой код: для метода, который проверяет, существует ли таблица, вполне разумно бросить это (и продолжать добавлять предложения throws вплоть до main, если только у вас нет некоторый код для обработки исключений, и «напечатать их», «зарегистрировать их» или «игнорировать их» не обрабатывает его).

Я бы также распечатывал каждый результат по мере поступления, на всякий случай » VIEW '- это правильно, а' TABLE_NAME '- нет.

Если вы не можете понять это, удалите VIEW и просто обнулите его; в этом случае вы получите все, что слишком много, но напечатаете соответствующую разделы, и вы найдете правильное имя для вашего движка БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...