Попробуйте это. Я бы использовал range1
или что-то отличное от range
для имени переменной. Также прочитайте , как избежать выбора . Вам, вероятно, придется проверить размер диапазонов, range1 должен быть одной ячейкой или иметь тот же размер, что и rangerc.
Sub main()
Dim rangeSrc As range, range1 As range
Set rangeSrc = Application.InputBox("Select src Range", "select src range", Type:=8) 'type 8 = range
Set range1 = Application.InputBox("select des range", "select des range", Type:=8)
If Not rangeSrc Is Nothing And Not range1 Is Nothing Then
rangeSrc.Copy range1
End If
End Sub
Используйте Statement.setFetchSize (1)
перед вызовом executeQuery ()
.
Это очень во многом зависит от того, какой драйвер JDBC вы используете. Возможно, вы захотите взглянуть на эту страницу , которая описывает поведение MySQL, Oracle, SQL Server и DB2.
Основные выводы:
setFetchSize ()
без каких-либо оговорок, тогда как другим потребуется некоторая «помощь». MySQL - особенно странный случай. См. эту статью . Похоже, что если вы вызываете setFetchSize (Integer.MIN_VALUE)
, то он будет загружать строки по одной, но это не совсем понятно.
Другой пример: вот документация по поведению PostgreSQL. Если автоматическая фиксация включена, ResultSet будет извлекать все строки сразу, но если он выключен, вы можете использовать setFetchSize ()
, как и ожидалось.
И последнее, о чем следует помнить. : эти настройки драйвера JDBC влияют только на то, что происходит на стороне клиента. Сервер по-прежнему может загружать весь набор результатов в память, но вы можете контролировать, как клиент загружает результаты.
Не могли бы вы добиться этого, установив размер выборки для вашего оператора в 1?
Если вы выбираете только 1 строку за раз, каждая строка не должна загружаться, пока вы не вызовете next () в ResultSet.
, например,
Statement statement = connection.createStatement();
statement.setFetchSize(1);
ResultSet resultSet = statement.executeQuery("SELECT .....");
while (resultSet.next())
{
// process results. each call to next() should fetch the next row
}
Вы найдете это намного проще, используя Hibernate . В основном вам придется свернуть свои собственные, если вы используете jdbc напрямую.
Стратегии извлечения в спящем режиме легко настраиваются и, скорее всего, предложат варианты производительности, о которых вы даже не знали.
Я думаю, что вам нужно отложить фактическую загрузку самого ResultSet. Вам нужно будет реализовать это вручную.