Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйвер Microsoft JDBC для SQL Server использует расширенные типы данных JDBC для преобразования типов данных SQL Server в формат, понятный языком программирования Java.
Замечания
В следующей таблице перечислены сопоставления по умолчанию между расширенными типами данных языка SQL Server, JDBC и Java.
| Типы SQL Server | Типы JDBC (java.sql.Types) | Типы языка Java |
|---|---|---|
| varbinary(max) Изображение |
LONGVARBINARY | byte[] (по умолчанию), BLOB-объект, InputStream, String |
| text varchar(max) |
LONGVARCHAR | String (по умолчанию), Clob, InputStream |
| ntext nvarchar(max) |
LONGVARCHAR LONGNVARCHAR (Java SE 6.0) |
Строка (по умолчанию), Clob, NClob |
| xml | LONGVARCHAR SQLXML |
String (по умолчанию), InputStream, Clob, byte[], BLOB-объект, SQLXML |
| Пользовательский тип1 | VARBINARY | String (по умолчанию), byte[], InputStream |
| sqlvariant | SQLVARIANT | Object |
| geometry география |
VARBINARY | byte[] |
| JSON (формат обмена данными JavaScript) | microsoft.sql.Types.JSON | String (по умолчанию), InputStream |
| вектор | microsoft.sql.Types.VECTOR | microsoft.sql.Vector |
1 Драйвер Microsoft JDBC для SQL Server поддерживает отправку и получение определяемых пользователем объектов CLR в виде двоичных данных, но не поддерживает обработку метаданных CLR.
В следующих разделах приведены примеры использования драйвера JDBC и расширенных типов данных.
Типы данных BLOB, CLOB и NCLOB
Драйвер JDBC реализует все методы интерфейсов java.sql.Blob, java.sql.Clob и java.sql.NClob.
Примечание.
Значения CLOB можно использовать с типами данных большого значения SQL Server 2005 (9.x) (или более поздней версии). В частности, типы CLOB могут использоваться с типами данных varchar(max) и nvarchar(max), типы BLOB могут использоваться с типами данных varbinary(max) и image, а типы NCLOB могут использоваться с ntext и nvarchar(max).
Типы данных большого объема
В более ранних версиях SQL Server работа с типами данных больших значений требует специальной обработки. Типы данных большого значения — это типы, превышающие максимальный размер строки в 8 КБ. SQL Server представляет максимальный описатель для типов данных varchar, nvarchar и varbinary , чтобы разрешить хранение значений размером 2^31 байт. Столбцы таблицы и переменные Transact-SQL могут указывать типы данных varchar(max), nvarchar(max) и varbinary(max).
В большинстве случаев работа с типами данных большого объема предполагает их извлечение из базы данных или добавление в базу данных. В следующих разделах описываются различные способы выполнения этих задач.
Извлечение типов данных большого объема из базы данных
При извлечении типа данных, не относящееся к большому значению, например типа данных varchar(max) из базы данных, один из подходов заключается в том, чтобы считать эти данные в виде символьного потока. В следующем примере для извлечения данных из базы данных и их возвращения в виде результирующего набора используется метод executeQuery класса SQLServerStatement. Затем для считывания данных большого объема из результирующего набора используется метод getCharacterStream класса SQLServerResultSet.
ResultSet rs = stmt.executeQuery("SELECT TOP 1 * FROM Test1");
rs.next();
Reader reader = rs.getCharacterStream(2);
Примечание.
Аналогичный подход можно использовать для типов данных text, ntext и nvarchar(max).
Извлечь тип двоичных данных большого объема, например типа данных varbinary(max) из базы данных, можно несколькими способами. Наиболее эффективным подходом является чтение данных в виде двоичного потока, как показано в следующем примере:
ResultSet rs = stmt.executeQuery("SELECT photo FROM mypics");
rs.next();
InputStream is = rs.getBinaryStream(2);
Вы также можете использовать метод getBytes для чтения данных в виде массива байтов, как в примере:
ResultSet rs = stmt.executeQuery("SELECT photo FROM mypics");
rs.next();
byte [] b = rs.getBytes(2);
Примечание.
Также можно считать данные в виде BLOB. Однако чтение БОЛЬШОго двоичного объекта менее эффективно, чем два метода, показанные ранее.
Добавление типов данных большого объема в базу данных
Драйвер JDBC хорошо справляется с загрузкой больших объемов данных при наличии достаточного объема памяти. В противном случае рекомендуется использовать потоковую передачу. Тем не менее, эффективнее всего загружать большие объемы данных с помощью потоковых интерфейсов.
Использование строки или байтов также является вариантом, как показано в следующем примере:
PreparedStatement pstmt = con.prepareStatement("INSERT INTO test1 (c1_id, c2_vcmax) VALUES (?, ?)");
pstmt.setInt(1, 1);
pstmt.setString(2, htmlStr);
pstmt.executeUpdate();
Примечание.
Такой способ применим и для величин, хранимых в столбцах типов text, ntext и nvarchar(max).
При наличии на сервере библиотеки изображений и при необходимости загрузки целых двоичных файлов изображений в столбец varbinary(max) эффективнее всего использовать драйвер JDBC, организуя потоки напрямую следующим образом:
try (PreparedStatement pstmt = con.prepareStatement("INSERT INTO test1 (Col1, Col2) VALUES(?,?)")) {
File inputFile = new File("CLOBFile20mb.jpg");
try (FileInputStream inStream = new FileInputStream(inputFile)) {
int id = 1;
pstmt.setInt(1,id);
pstmt.setBinaryStream(2, inStream);
pstmt.executeUpdate();
}
}
Примечание.
Использование метода CLOB или BLOB не является эффективным способом отправки больших данных.
Изменение типов данных большого объема в базе данных
В большинстве случаев для обновления или изменения больших значений в базе данных рекомендуется передавать параметры через классы SQLServerPreparedStatement и SQLServerCallableStatement с помощью таких команд Transact-SQL, как UPDATE, WRITE, а также SUBSTRING.
Если необходимо заменить экземпляр слова в большом текстовом файле, например архивированный HTML-файл, можно использовать объект Clob, как показано в следующем примере:
String SQL = "SELECT * FROM test1;";
try (Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE)
ResultSet rs = stmt.executeQuery(SQL)) {
rs.next();
Clob clob = rs.getClob(2);
long pos = clob.position("dog", 1);
clob.setString(pos, "cat");
rs.updateClob(2, clob);
rs.updateRow();
}
Кроме того, можно выполнить все операции на сервере и просто передать параметры в подготовленную инструкцию UPDATE.
Дополнительные сведения о типах данных большого объема ищите в разделе «Использование типов данных большого объема» электронной документации по Microsoft SQL Server.
Тип данных XML
SQL Server предоставляет тип данных XML , позволяющий хранить XML-документы и фрагменты в базе данных SQL Server. Тип данных XML — это встроенный тип данных в SQL Server, который аналогичен другим встроенным типам, таким как int и varchar. Аналогично другим встроенным типам типы данных xml можно использовать следующим образом: как тип столбца при создании таблицы, как тип переменной, тип параметра, тип возвращаемой функции, а также в функциях CAST и CONVERT Transact-SQL.
В драйвере JDBC тип данных xml может быть сопоставлен со строкой, байтовым массивом, потоком или объектом CLOB, BLOB или SQLXML. По умолчанию задана строка. В JDBC Driver версии 2.0 и более поздних версиях драйвер JDBC предоставляет поддержку API JDBC 4.0, который представляет интерфейс SQLXML. Интерфейс SQLXML определяет методы для обмена данными XML и их обработки. Тип данных SQLXML сопоставляется с типом данных XML SQL Server. Дополнительные сведения о считывании XML-данных из реляционной базы данных и их записи в нее с типом данных Java SQLXML см. в руководстве по использованию данных XML.
Благодаря реализации типа данных xml в драйвере JDBC обеспечена поддержка следующих возможностей:
Доступ к XML как к стандартным строкам Java UTF-16 для большинства общепринятых методик программирования.
Ввод UTF-8 и других XML-данных с 8-битным кодированием.
Доступ к XML как к байтовому массиву с ведущей меткой следования байтов (BOM) при кодировании в UTF-16 для взаимообмена с другими средствами обработками XML и файлами на диске.
ДЛЯ SQL Server требуется ведущий BOM для XML в кодировке UTF-16. Приложение должно предоставить ведущую BOM, если значения параметров XML предоставляются в виде массивов байтов. SQL Server всегда выводит XML-значения в виде строк UTF-16 без объявления BOM или встроенной кодировки. Когда XML-значения извлекаются как байт[], BinaryStream или BLOB-объект, объект BOM UTF-16 добавляется к значению.
Дополнительные сведения о типе данных XML см. в статье "Тип данных XML" в электронной документации по SQL Server.
Определяемый пользователем тип данных
Введение определяемых пользователем типов (определяемых пользователем типов) в SQL Server 2005 (9.x) расширяет систему типов SQL, позволяя хранить объекты и пользовательские структуры данных в базе данных SQL Server. Определяемые пользователем типы данных могут содержать несколько типов данных и могут иметь поведение, отличая их от традиционных типов данных псевдонимов, состоящих из одного типа системных данных SQL Server. Определяемые пользователем UDT определяются с помощью любого из языков, поддерживаемых средой CLR (CLR), которая создает проверяемый код, включая Microsoft Visual C# и Visual Basic .NET. Данные предоставляются как поля и свойства класса или структуры на основе .NET Framework, методы класса или структуры определяют поведение.
В SQL Server пользовательские типы (UDT) можно применять в качестве идентификатора столбцов таблицы, как переменную в пакете Transact-SQL или как аргумент функции Transact-SQL либо хранимой процедуры.
Дополнительные сведения о определяемых пользователем типах данных см. в статье "Использование и изменение экземпляров определяемых пользователем типов" в электронной документации ПО SQL Server.
Тип данных sql_variant
Дополнительные сведения см. в статье об использовании типа данных Sql_variant.
Типы пространственных данных
Дополнительные сведения см. в статье об использовании пространственных типов данных.
Тип данных JSON
Сведения о типе данных JSON см. в разделе "Тип данных JSON".
Тип векторных данных
Сведения о типе векторных данных см. в разделе "Вектор данных".