Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
JDBC sürücüsünü indirin
SQL Server için bu Microsoft JDBC Sürücüsü örnek uygulaması, veritabanından büyük bir veri kümesinin nasıl alınyacağını gösterir. Ardından SQLServerResultSet nesnesinin setFetchSize yöntemini kullanarak istemcide önbelleğe alınan veri satırlarının sayısını denetler.
Uyarı
İstemcide önbelleğe alınan satır sayısını sınırlamak, sonuç kümesinin içerebileceği toplam satır sayısını sınırlamaktan farklıdır. Sonuç kümesinde yer alan toplam satır sayısını denetlemek için SQLServerPreparedStatement ve SQLServerCallableStatement nesneleri tarafından devralınan SQLServerStatement nesnesinin setMaxRows yöntemini kullanın.
İstemcide önbelleğe alınacak satır sayısına bir sınır koymak için, Statement nesneleri oluştururken sunucu tarafı imleç kullanan bir imleç türü belirtin. Örneğin, JDBC sürücüsü, SQL Server veritabanlarıyla kullanım için hızlı ve yalnızca ileriye doğru hareket eden, salt okunur bir sunucu tarafı imleç türü olan TYPE_SS_SERVER_CURSOR_FORWARD_ONLY imlecini sağlar.
Uyarı
SQL Server'a özgü imleç türünü kullanmanın bir alternatifi, değerini "imleç" olarak ayarlayarak selectMethod bağlantı dizesi özelliğini kullanmaktır. JDBC sürücüsü tarafından desteklenen imleç türleri hakkında daha fazla bilgi için bkz. İmleç türlerini anlama.
Deyimi nesnesinde sorguyu çalıştırdıktan ve sonuç kümesi olarak veriler istemciye döndürüldükten sonra, veritabanından bir kerede ne kadar veri alınıp alınyacağını denetlemek için çağrısı setFetchSize yapın. Örneğin, 100 veri satırı içeren bir tablonuz varsa ve getirme boyutu 10 ise, istemcide aynı anda yalnızca 10 veri satırı önbelleğe alınır. Bu ayar verilerin işlenme hızını yavaşlatsa da istemcide daha az bellek kullanır. Bu senaryo, çok fazla bellek kullanmadan büyük miktarda veriyi işlemeniz gerektiğinde kullanışlıdır.
Bu örneğin kod dosyası CacheResultSet.java olarak adlandırılır ve aşağıdaki konumda bulunabilir:
\<installation directory>\sqljdbc_<version>\<language>\samples\resultsets
Gereksinimler
Bu örnek uygulamayı çalıştırmak için classpath'i mssql-jdbc jar dosyasını içerecek şekilde ayarlayın. AdventureWorks2025 örnek veritabanına da erişmeniz gerekir. Sınıf yolu ayarlama hakkında daha fazla bilgi için bkz. JDBC Sürücüsünü Kullanma.
Uyarı
SQL Server için Microsoft JDBC Sürücüsü, tercih ettiğiniz Java Çalışma Zamanı Ortamı (JRE) ayarlarına bağlı olarak kullanılacak mssql-jdbc sınıf kitaplığı dosyalarını sağlar. Hangi JAR dosyasının seçileceği hakkında daha fazla bilgi için bkz. JDBC Sürücüsü için Sistem Gereksinimleri.
Example
Aşağıdaki örnekte örnek kod AdventureWorks2025 örnek veritabanıyla bağlantı kurar. Ardından SQLServerStatement nesnesiyle bir SQL deyimi kullanır, sunucu tarafı imleç türünü belirtir ve SQL deyimini çalıştırır. Veriler bir SQLServerResultSet nesnesinde döndürülür.
Ardından örnek kod, kullanılacak getirme boyutunu ve sonuç kümesini bağımsız değişken olarak geçirerek özel timerTest yöntemini çağırır. TimerTest metodu, daha sonra setFetchSize metodunu kullanarak sonuç kümesinin getirme boyutunu ayarlar, testin başlangıç zamanını belirler ve ardından While döngüsü ile sonuç kümesinde yinelemeler yapar. Döngüden While çıkar çıkmaz kod testin durdurma süresini ayarlar ve ardından getirme boyutu, işlenen satır sayısı ve testi yürütmek için geçen süre dahil olmak üzere testin sonucunu görüntüler.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import com.microsoft.sqlserver.jdbc.SQLServerResultSet;
public class CacheResultSet {
@SuppressWarnings("serial")
public static void main(String[] args) {
// Create a variable for the connection string.
String connectionUrl = "jdbc:sqlserver://<server>:<port>;encrypt=true;databaseName=AdventureWorks;user=<user>;password=<password>";
try (Connection con = DriverManager.getConnection(connectionUrl);
Statement stmt = con.createStatement(SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY, SQLServerResultSet.CONCUR_READ_ONLY);) {
String SQL = "SELECT * FROM Sales.SalesOrderDetail;";
for (int n : new ArrayList<Integer>() {
{
add(1);
add(10);
add(100);
add(1000);
add(0);
}
}) {
// Perform a fetch for every nth row in the result set.
try (ResultSet rs = stmt.executeQuery(SQL)) {
timerTest(n, rs);
}
}
}
// Handle any errors that may have occurred.
catch (SQLException e) {
e.printStackTrace();
}
}
private static void timerTest(int fetchSize,
ResultSet rs) throws SQLException {
// Declare the variables for tracking the row count and elapsed time.
int rowCount = 0;
long startTime = 0;
long stopTime = 0;
long runTime = 0;
// Set the fetch size then iterate through the result set to
// cache the data locally.
rs.setFetchSize(fetchSize);
startTime = System.currentTimeMillis();
while (rs.next()) {
rowCount++;
}
stopTime = System.currentTimeMillis();
runTime = stopTime - startTime;
// Display the results of the timer test.
System.out.println("FETCH SIZE: " + rs.getFetchSize());
System.out.println("ROWS PROCESSED: " + rowCount);
System.out.println("TIME TO EXECUTE: " + runTime);
System.out.println();
}
}