Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Задайте предварително извличане на ред по подразбиране в SQL Server с помощта на JDBC драйвер

Обичайните начини за задаване на размера на извличане на ред са:

  1. Чрез java.sql.Connection клас за внедряване на доставчика персонализиран метод (напр. OracleConnection.setDefaultRowPrefetch )
  2. Чрез java.sql.Statement.setFetchSize(int) :дава подсказка на драйвера за размера на извличане на ред за всички ResultSets получени от това Statement . Този метод е наследен от PreparedStatement и CallableStatement . Повечето JDBC драйвери го поддържат.
  3. Чрез java.sql.ResultSet.setFetchSize(int) :дава подсказка на драйвера относно размера на извличане на ред за целия този ResultSet .

JDBC драйверът на MS SQL Server не поддържа нито един от тези начини:

  1. MSSQL драйверът няма такъв метод.
  2. За съжаление, докато повечето драйвери зачитат подсказката, MSSQL драйверът не го прави. Така че не е полезно за вас. Вижте Какво всъщност означава методът Statement.setFetchSize(nSize) в JDBC драйвера на SQL Server?
  3. Същият проблем като 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. Това е превъзходен драйвер.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. присъединете колона с данни, разделени със запетая

  2. Java JDBC:дати постоянно два почивни дни

  3. RowVersion и производителност

  4. Необходимо ли е връщане назад, ако заявката е завършена с грешки?

  5. CLR строга сигурност на SQL Server 2017