Java sql выбирается из базы данных пакетно

#java #sql #postgresql #jdbc

#java #sql #postgresql #jdbc

Вопрос:

У меня есть таблица postgres, которая содержит миллионы записей, и я хочу запрашивать ее в пакетах 10.000 . Это означает, что я должен отправить запрос, подобный этому:

 SELECT id FROM my_table
 

и вместо того, чтобы получать миллионы записей, я хочу получить 10.000, затем сохранить их идентификаторы в массиве, сделать что-то с идентификаторами и продолжить чтение следующей партии из 10.000. Есть ли какой-нибудь способ сделать это на Java?

До сих пор я использую подготовленное утверждение следующим образом:

 ArrayList<String> ids = new ArrayList<String>();
String sql = "SELECT id FROM my_table ";
PreparedStatement statement = connection.prepareStatement(handleDatabaseSyntax(sql));
ResultSet rs = statement.executeQuery();
while(rs.next())
{
  ids.add(rs.getString(1));
}
 

Я видел PreparedStatement , что для этого есть некоторая помощь, но я не уверен, как ее использовать. Я ценю любую помощь, которую вы можете предоставить.

Ответ №1:

Используйте setFetchSize со значением, отличным от 0, чтобы драйвер JDBC не извлекал весь результирующий набор сразу.

Затем выполните цикл, аналогичный тому, как вы это сделали:

 statement.setFetchSize(200);
ResultSet rs = statement.executeQuery();
int counter = 0;
while (rs.next())
{
    ids.add(rs.getString(1));
    if (  counter % 10000 == 0)
    {
        /* do something with "ids" */
        ids.removeAll();
    }
}
/* do something with the remaining "ids" */