Я пытался получить данные ограничения для всех таблиц, используя запрос 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 () от этого не страдает) Спасибо.