#sql-server #jdbc
#sql-server #jdbc
Вопрос:
Я пытался получить данные ограничения для всех таблиц, используя SQL-запрос через JDBC.
В моей тестовой базе данных всего 3 таблицы.
Если я выполняю запрос в интерактивном режиме с использованием MS SQL 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-запрос, выполняемый в интерактивном режиме. Может ли это быть проблемой безопасности / владения? (хотя вызов getPrimaryKeys() в JDBC не страдает от этого)
Спасибо.
Ответ №1:
Я не вижу, где вы устанавливаете контекст своей базы данных, но я подозреваю, что в этом проблема. В качестве теста вы можете изменить свой оператор на «select db_name()» и посмотреть, что он возвращает. Если это не та база данных, в которой, по вашему мнению, вы должны находиться, это ваша проблема.
Комментарии:
1. Ого!! Бен, спасибо! Это было все. Я мог бы поклясться, что я был подключен к правильной базе данных, но я был подключен к «master» (возникла проблема с построением строки подключения). Что меня удивило, так это то, что getPrimaryKeys() возвращал правильную информацию.