Обичайните начини за задаване на размера на извличане на ред са:
- Чрез
java.sql.Connection
клас за внедряване на доставчика персонализиран метод (напр.OracleConnection.setDefaultRowPrefetch
) - Чрез
java.sql.Statement.setFetchSize(int)
:дава подсказка на драйвера за размера на извличане на ред за всичкиResultSets
получени от товаStatement
. Този метод е наследен отPreparedStatement
иCallableStatement
. Повечето JDBC драйвери го поддържат. - Чрез
java.sql.ResultSet.setFetchSize(int)
:дава подсказка на драйвера относно размера на извличане на ред за целия тозиResultSet
.
JDBC драйверът на MS SQL Server не поддържа нито един от тези начини:
- MSSQL драйверът няма такъв метод.
- За съжаление, докато повечето драйвери зачитат подсказката, MSSQL драйверът не го прави. Така че не е полезно за вас. Вижте Какво всъщност означава методът Statement.setFetchSize(nSize) в JDBC драйвера на SQL Server?
- Същият проблем като
Statement
.
По подразбиране извлича всички редовете от базата данни, освен ако не посочите тип курсор в JDBC драйвера. MSSQL драйверът не може директно да контролира размера на извличане чрез обичайните методи.
Решения:
- Представете своето
Statement
къмSQLServerStatement
и използвайте методаsetMaxRows(int)
. Защо не внедриха това в стандартния метод Steve Ballmer само знае;^) - Създайте вашия драйвер с тип курсор. Размерът на извличане по подразбиране за курсор е 1. Задайте
Connection
свойство на низselectMethod=cursor
. Като алтернатива можете да създадетеStatement
сcom.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY
възможност за превъртане за достъп само за напред, само за четене и след това използвайтеsetFetchSize
метод за настройка на производителността. http://technet.microsoft.com/en -us/library/aa342344%28SQL.90%29.aspx - Използвайте (собствен) SQL, за да ограничите броя на върнатите редове (не е същото като задаване на размера на извличане ):
SET ROWCOUNT
илиSELECT TOP N
- Преминете към jTDS с отворен код драйвер, специално създаден за преодоляване на проблемите на драйвера на SQL Server. Това е превъзходен драйвер.