Запрос SQL Server ведет себя по-другому в интерактивном режиме, чем через JDBC - некоторые таблицы опущены - PullRequest
0 голосов
/ 23 мая 2011

Я пытался получить данные ограничения для всех таблиц, используя запрос SQL через JDBC.

В моей тестовой базе данных есть только 3 таблицы.

Если я выполняю запрос в интерактивном режиме с использованием MSSQL Server Management Studio, я получаю все ожидаемые результаты (т. Е. 3 строки - есть первичный ключ в каждой из 3 таблиц).

, если я использую метод JDBC для специального получения первичных ключей (как показано ниже) тогда я также правильно получаю 3 результата:

ResultSet rs = dbmd.getPrimaryKeys(jdbcCatalog, jdbcSchema, jdbcTableName);

Если я использую точно такой же оператор SQL (который я использовал в интерактивном режиме и получил 3 результата назад) в качестве запроса через JDBC (с использованием executeQuery (), показанного ниже)тогда я получу только 1 результат вместо ожидаемых 3.

String query =
    "select PK.CONSTRAINT_NAME, PK.TABLE_SCHEMA, PK.TABLE_NAME " +
    "from information_schema.TABLE_CONSTRAINTS PK";
ResultSet rs = null;
try {
    Statement stmt = con.createStatement();
    rs = stmt.executeQuery(query);
}catch (Exception exception) {
    // Exception handler code
}
while (rs.next()){
    // Only executes once.
}

Я был бы очень признателен, если бы кто-то мог объяснить, почему SQL-запрос через JDBC выполняет иначе, чем тот же SQL-запрос, выполняемый в интерактивном режиме.Может ли это быть проблемой безопасности / владения?(хотя вызов JDBC getPrimaryKeys () от этого не страдает) Спасибо.

1 Ответ

1 голос
/ 23 мая 2011

Я не вижу, где вы устанавливаете контекст вашей базы данных, но я подозреваю, что это проблема.В качестве теста вы можете изменить свое утверждение на «select db_name ()» и посмотреть, что оно возвращает.Если это не та база данных, в которой, по вашему мнению, вы должны быть, это ваша проблема.

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