Как выполнить запрос выбора на ResultSet другого запроса выбора в java - PullRequest
0 голосов
/ 17 июня 2020

Это код, в котором я пытаюсь выполнить второй запрос на resultSet моего первого длинного запроса. Мне нужно куда-то загрузить эти данные.

Это правильно?

Или есть лучший подход, кроме повторного запроса к базе данных?

 public String createQuery() throws SQLException {
     StringBuilder Query = new StringBuilder();
     try {
        Query.append(" SELECT ...... ")
       } catch (Exception e) {
        e.printStackTrace();
    }
    return Query.toString();
}
 private void openPreparedStatements() throws SQLException {
    myQuery = createQuery();      
    try {
        QueryStatement = dbConnection.prepareStatement(myQuery);
    } catch (SQLException e) {
        e.printStackTrace();
        return;
    }
}
public ResultSet selectData(String timestamp) throws SQLException {
    openConnection();
    ResultSet result = null;
    ResultSet rs_new=null;
    try {
        result = QueryStatement.executeQuery();
        while (result.next()) {
           String query = "SELECT * FROM " + result + " WHERE " + "ID" + " =" + "ABC";
            rs_new =QueryStatementNew.executeQuery(query);
            System.out.print(rs_new);
        }
    } catch (SQLException e) {
        LOGGER.info("Exception", e);
    }

    return result;
}

Ответы [ 3 ]

1 голос
/ 13 августа 2020

Вы не можете использовать два объекта операторов в одном соединении с базой данных. Таким образом, вы можете либо открыть другое соединение с базой данных и выполнить второй оператор во втором соединении, либо выполнить итерацию по набору результатов из первого оператора и сохранить нужное значение (например, в массиве / коллекции), затем закрыть этот оператор и запустить второй, на этот раз получение значения из массива / коллекции, в которой вы их сохранили. Обратитесь к Java создание запроса из resultSet и выполнение нового запроса

1 голос
/ 17 июня 2020

Вместо выполнения двух отдельных запросов (когда вам не нужен промежуточный), вы можете их объединить.

Например, вы можете:

SELECT *
FROM (
  -- first query here
) x
WHERE ID = 'ABC'
0 голосов
/ 17 июня 2020

Заставьте Db2 сохранить ваш промежуточный набор результатов в глобальной временной таблице, если у вас есть возможность использовать его, и ваше приложение использует тот же сеанс соединения с базой данных.

DECLARE GLOBAL TEMPORARY TABLE SESSION.TMP_RES AS 
(
SELECT ID, ... -- Your first lengthy query text goes here
) WITH DATA WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED;

Вы можете отправить результат последующий SELECT ... FROM SESSION.TMP_RES на FTP, а результат SELECT * FROM SESSION.TMP_RES WHERE ID = 'ABC' на elasti c.

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