पंक्ति लाने का आकार निर्धारित करने के सामान्य तरीके हैं:
java.sql.Connection
. के माध्यम से विक्रेता कार्यान्वयन वर्ग कस्टम विधि (उदा.OracleConnection.setDefaultRowPrefetch
)- के माध्यम से
java.sql.Statement.setFetchSize(int)
:ड्राइवर को सभीResultSets
. के लिए पंक्ति लाने के आकार के बारे में संकेत देता है इसStatement
से प्राप्त . यह विधिPreparedStatement
. द्वारा इनहेरिट की गई है औरCallableStatement
. अधिकांश JDBC ड्राइवर इसका समर्थन करते हैं। - के माध्यम से
java.sql.ResultSet.setFetchSize(int)
:यह सबResultSet
. के लिए पंक्ति लाने के आकार के बारे में ड्राइवर को संकेत देता है .
MS SQL सर्वर JDBC ड्राइवर इनमें से किसी भी तरीके का समर्थन नहीं करता:
- MSSQL ड्राइवर के पास ऐसी कोई विधि नहीं है।
- दुर्भाग्य से, जबकि अधिकांश ड्राइवर संकेत का सम्मान करते हैं, MSSQL ड्राइवर नहीं करता है। तो आपके लिए उपयोगी नहीं है। देखें Statement.setFetchSize(nSize) मेथड वास्तव में क्या करता है SQL सर्वर JDBC ड्राइवर में करते हैं?
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/लाइब्रेरी/aa342344%28SQL.90%29.aspx - लौटाई गई पंक्तियों की संख्या को सीमित करने के लिए (मालिकाना) SQL का उपयोग करें (फ़ेच आकार सेट करने के समान नहीं ):
SET ROWCOUNT
याSELECT TOP N
- खुले स्रोत पर स्विच करें jTDS ड्राइवर, विशेष रूप से SQL सर्वर ड्राइवर की समस्याओं को दूर करने के लिए बनाया गया है। यह एक बेहतर ड्राइवर है।