Пример считывания большого объема данных
В этом примере приложения применяется Microsoft JDBC Driver для SQL Server для демонстрации процесса получения больших значений одного столбца из базы данных SQL Server с помощью метода getCharacterStream.
Файл кода для этого образца имеет имя ReadLargeData.java и находится в следующей папке:
\<installation directory>\sqljdbc_<version>\<language>\samples\adaptive
Требования
Для запуска этого примера приложения вам потребуется доступ к образцу базы данных AdventureWorks2022. Необходимо также включить в параметр classpath путь к файлу mssql-jdbc.jar. См. сведения о том, как настроить classpath в руководстве по использованию драйвера JDBC Driver.
Примечание.
Драйвер Microsoft JDBC для SQL Server предоставляет файлы библиотеки классов mssql-jdbc для использования в зависимости от предпочитаемых параметров среды выполнения Java (JRE). Для получения дополнительных сведений о том, какой JAR-файл выбрать, см. статью Требования к системе для драйвера JDBC.
Пример
В следующем примере пример кода делает подключение к базе данных AdventureWorks2022. Затем образец кода создает образцы данных и обновляет таблицу Production.Document с помощью параметризированного запроса.
Кроме того, в образце кода показано, как получить режим адаптивной буферизации с помощью метода getResponseBuffering класса SQLServerStatement. Обратите внимание, что, начиная с версии драйвера JDBC 2.0, свойство соединения responseBuffering по умолчанию имеет значение «adaptive».
Затем с помощью инструкции SQL с объектом SQLServerStatement пример кода запускает инструкцию SQL и помещает данные, возвращаемые в объект SQLServerResultSet .
Наконец, выполняется проход по строкам данных, содержащимся в результирующем наборе, и выполняется доступ к некоторым из этих данных с помощью метода getCharacterStream.
import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.microsoft.sqlserver.jdbc.SQLServerStatement;
public class ReadLargeData {
public static void main(String[] args) {
// Create a variable for the connection string.
String connectionUrl = "jdbc:sqlserver://<server>:<port>;databaseName=AdventureWorks;user=<user>;password=<password>";
// Create test data as an example.
StringBuffer buffer = new StringBuffer(4000);
for (int i = 0; i < 4000; i++)
buffer.append((char) ('A'));
try (Connection con = DriverManager.getConnection(connectionUrl);
Statement stmt = con.createStatement();
PreparedStatement pstmt = con.prepareStatement("UPDATE Production.Document SET DocumentSummary = ? WHERE (DocumentID = 1)");) {
pstmt.setString(1, buffer.toString());
pstmt.executeUpdate();
// In adaptive mode, the application does not have to use a server cursor
// to avoid OutOfMemoryError when the SELECT statement produces very large
// results.
// Create and execute a SQL statement that returns some data.
String SQL = "SELECT Title, DocumentSummary FROM Production.Document";
// Display the response buffering mode.
SQLServerStatement SQLstmt = (SQLServerStatement) stmt;
System.out.println("Response buffering mode is: " + SQLstmt.getResponseBuffering());
SQLstmt.close();
// Get the updated data from the database and display it.
ResultSet rs = stmt.executeQuery(SQL);
while (rs.next()) {
Reader reader = rs.getCharacterStream(2);
if (reader != null) {
char output[] = new char[40];
while (reader.read(output) != -1) {
// Do something with the chunk of the data that was
// read.
}
System.out.println(rs.getString(1) + " has been accessed for the summary column.");
// Close the stream.
reader.close();
}
}
}
// Handle any errors that may have occurred.
catch (SQLException | IOException e) {
e.printStackTrace();
}
}
}