Geavanceerde gegevenstypen gebruiken

JDBC-stuurprogramma downloaden

Het Microsoft JDBC-stuurprogramma voor SQL Server gebruikt de geavanceerde JDBC-gegevenstypen om de SQL Server-gegevenstypen te converteren naar een indeling die wordt begrepen door de Java-programmeertaal.

Opmerkingen

De volgende tabel bevat de standaardtoewijzingen tussen de gegevenstypen geavanceerde SQL Server, JDBC en Java-programmeertaal.

SQL Server-typen JDBC-typen (java.sql.Types) Java-taaltypen
varbinary(max)

beeld
LONGVARBINARY byte[] (standaard), Blob, InputStream, String
Tekst

varchar(max)
LONGVARCHAR Tekenreeks (standaard), Clob, InputStream
ntekst

nvarchar(max)
LONGVARCHAR

LONGNVARCHAR (Java SE 6.0)
Tekenreeks (standaard), Clob, NClob
xml LONGVARCHAR

SQLXML
Tekenreeks (standaard), InputStream, Clob, byte[], Blob, SQLXML
Udt1 VARBINARY Tekenreeks (standaard), byte[], InputStream
sqlvariant SQLVARIANT Object
meetkunde

geografie
VARBINARY byte[]
json microsoft.sql.Types.JSON Tekenreeks (standaard), InputStream
vector microsoft.sql.Types.VECTOR microsoft.sql.Vector

1 Het Microsoft JDBC-stuurprogramma voor SQL Server ondersteunt het verzenden en ophalen van CLR-UDT's als binaire gegevens, maar biedt geen ondersteuning voor manipulatie van de CLR-metagegevens.

De volgende secties bevatten voorbeelden van hoe u het JDBC-stuurprogramma en de geavanceerde gegevenstypen kunt gebruiken.

Blob- en CLOB- en NCLOB-gegevenstypen

Het JDBC-stuurprogramma implementeert alle methoden van de interfaces java.sql.Blob, java.sql.Clob en java.sql.NClob.

Opmerking

CLOB-waarden kunnen worden gebruikt met gegevenstypen met een grote waarde van SQL Server 2005 (9.x) (of hoger). Met name CLOB-typen kunnen worden gebruikt met de gegevenstypen varchar(max) en nvarchar(max), blob-typen kunnen worden gebruikt met varbinary(max) en afbeeldingsgegevenstypen , en NCLOB-typen kunnen worden gebruikt met ntext en nvarchar(max).

Gegevenstypen met grote waarden

In eerdere versies van SQL Server is speciale verwerking vereist voor het werken met gegevenstypen met een grote waarde. Gegevenstypen met een grote waarde zijn typen die groter zijn dan de maximale rijgrootte van 8 kB. SQL Server introduceert een maximale aanduiding voor varchar-, nvarchar- en varbinaire gegevenstypen, zodat waarden maximaal 2^31 bytes kunnen worden opgeslagen. Tabelkolommen en Transact-SQL variabelen kunnen gegevenstypen varchar(max), nvarchar(max) of varbinary(max) opgeven.

De primaire scenario's voor het werken met typen grote waarden omvatten het ophalen uit een database of het toevoegen aan een database. In de volgende secties worden verschillende methoden beschreven om deze taken uit te voeren.

Typen grote waarden ophalen uit een database

Wanneer u een niet-binair gegevenstype met een grote waarde ophaalt, zoals het gegevenstype varchar(max) uit een database, kunt u die gegevens als tekenstroom lezen. In het volgende voorbeeld wordt de executeQuery-methode van de klasse SQLServerStatement gebruikt om gegevens op te halen uit de database en deze als resultaatset te retourneren. Vervolgens wordt de methode getCharacterStream van de klasse SQLServerResultSet gebruikt om de gegevens van de grote waarde uit de resultatenset te lezen.

ResultSet rs = stmt.executeQuery("SELECT TOP 1 * FROM Test1");
rs.next();
Reader reader = rs.getCharacterStream(2);

Opmerking

Deze benadering kan ook worden gebruikt voor de gegevenstypen tekst, ntext en nvarchar(max ).

Wanneer u een binair gegevenstype met een grote waarde ophaalt, zoals het gegevenstype varbinary(max) uit een database, zijn er verschillende benaderingen die u kunt gebruiken. De meest efficiënte benadering is het lezen van de gegevens als een binaire stroom, zoals in het volgende voorbeeld:

ResultSet rs = stmt.executeQuery("SELECT photo FROM mypics");
rs.next();
InputStream is = rs.getBinaryStream(2);

U kunt de methode getBytes ook gebruiken om de gegevens als een bytematrix te lezen, zoals in het voorbeeld:

ResultSet rs = stmt.executeQuery("SELECT photo FROM mypics");
rs.next();
byte [] b = rs.getBytes(2);

Opmerking

U kunt de gegevens ook lezen als blob. Het lezen van een BLOB is echter minder efficiënt dan de twee methoden die eerder werden weergegeven.

Typen grote waarden toevoegen aan een database

Het uploaden van grote gegevens met het JDBC-stuurprogramma werkt goed voor de gevallen van geheugenformaat, en in de gevallen met meer dan geheugen is streaming de primaire optie. De meest efficiënte manier om grote gegevens te uploaden, is echter via de streaminterfaces.

Het gebruik van een tekenreeks of bytes is ook een optie, zoals in het volgende voorbeeld:

PreparedStatement pstmt = con.prepareStatement("INSERT INTO test1 (c1_id, c2_vcmax) VALUES (?, ?)");
pstmt.setInt(1, 1);
pstmt.setString(2, htmlStr);
pstmt.executeUpdate();

Opmerking

Deze methode kan ook worden gebruikt voor waarden die zijn opgeslagen in kolommen tekst, ntext en nvarchar(max ).

Als u een afbeeldingsbibliotheek op de server hebt en volledige binaire afbeeldingsbestanden moet uploaden naar een varbinary(max) -kolom, is de meest efficiënte methode met het JDBC-stuurprogramma om stromen rechtstreeks te gebruiken, zoals in het volgende:

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();
  }
}

Opmerking

Het gebruik van de CLOB- of BLOB-methode is geen efficiënte manier om grote gegevens te uploaden.

Typen grote waarden in een database wijzigen

In de meeste gevallen is de aanbevolen methode voor het bijwerken of wijzigen van grote waarden in de database het doorgeven van parameters via de klassen SQLServerPreparedStatement en SQLServerCallableStatement met behulp van Transact-SQL opdrachten zoals UPDATE, WRITEen SUBSTRING.

Als u het exemplaar van een woord in een groot tekstbestand, zoals een gearchiveerd HTML-bestand, moet vervangen, kunt u een Clob-object gebruiken, zoals in het volgende voorbeeld:

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();
}

Daarnaast kunt u al het werk op de server uitvoeren en parameters doorgeven aan een voorbereide UPDATE-instructie.

Zie 'Using Large-Value Types' (Typen voor grote waarden gebruiken) in SQL Server Books Online voor meer informatie over typen met grote waarden.

XML-gegevenstype

SQL Server biedt een XML-gegevenstype waarmee u XML-documenten en -fragmenten kunt opslaan in een SQL Server-database. Het XML-gegevenstype is een ingebouwd gegevenstype in SQL Server en is op sommige manieren vergelijkbaar met andere ingebouwde typen, zoals int en varchar. Net als bij andere ingebouwde typen kunt u het xml-gegevenstype als kolomtype gebruiken wanneer u een tabel maakt; als een variabel type, een parametertype of een functie-retourtype; of in Transact-SQL CAST- en CONVERT-functies.

In het JDBC-stuurprogramma kan het xml-gegevenstype worden toegewezen als een tekenreeks, bytematrix, stroom, CLOB, BLOB of SQLXML-object. Tekenreeks is de standaardwaarde. In JDBC-stuurprogrammaversie 2.0 en hoger biedt het JDBC-stuurprogramma ondersteuning voor de JDBC 4.0-API, waarin de SQLXML-interface wordt geïntroduceerd. De SQLXML-interface definieert methoden voor interactie en manipulatie van XML-gegevens. Het SQLXML-gegevenstype wordt toegewezen aan hetXML-gegevenstype van SQL Server. Zie Ondersteunende XML-gegevens voor meer informatie over het lezen en schrijven van XML-gegevens van en naar de relationele database met het SQLXML Java-gegevenstype.

De implementatie van het XML-gegevenstype in het JDBC-stuurprogramma biedt ondersteuning voor het volgende:

  • Toegang tot de XML als een standaard Java UTF-16-tekenreeks voor de meest voorkomende programmeerscenario's

  • Invoer van UTF-8 en andere 8-bits gecodeerde XML

  • Toegang tot de XML als een bytematrix met een voorlooplijst wanneer deze is gecodeerd in UTF-16 voor uitwisseling met andere XML-processors en schijfbestanden

SQL Server vereist een toonaangevende BOM voor UTF-16-gecodeerde XML. De toepassing moet de voorlooplijst opgeven wanneer XML-parameterwaarden worden opgegeven als bytematrices. SQL Server voert altijd XML-waarden uit als UTF-16-tekenreeksen zonder stuklijst of ingesloten coderingsdeclaratie. Wanneer XML-waarden worden opgehaald als byte[], BinaryStream of Blob, wordt een UTF-16-stuklijst voorafgegaan aan de waarde.

Zie XML-gegevenstype in SQL Server Books Online voor meer informatie over het xml-gegevenstype .

Door de gebruiker gedefinieerd gegevenstype

De introductie van door de gebruiker gedefinieerde typen (UDT's) in SQL Server 2005 (9.x) breidt het SQL-typesysteem uit door u objecten en aangepaste gegevensstructuren in een SQL Server-database op te slaan. UDT's kunnen meerdere gegevenstypen bevatten en kunnen gedrag hebben, waarbij ze worden onderscheiden van de traditionele aliasgegevenstypen die bestaan uit één gegevenstype van het SQL Server-systeem. UDT's worden gedefinieerd met behulp van een van de talen die worden ondersteund door de Common Language Runtime (CLR) van Microsoft .NET die verifieerbare code produceren, waaronder Microsoft Visual C# en Visual Basic .NET. De gegevens worden weergegeven als velden en eigenschappen van een .NET Framework-klasse of -structuur, methoden van de klasse of structuur definiëren gedrag.

In SQL Server kan een UDT worden gebruikt als de kolomdefinitie van een tabel, als een variabele in een Transact-SQL batch of als argument van een Transact-SQL functie of opgeslagen procedure.

Zie 'Exemplaren van door de gebruiker gedefinieerde typen gebruiken en wijzigen' in SQL Server Books Online voor meer informatie over door de gebruiker gedefinieerde gegevenstypen.

Sql_variant gegevenstype

Zie Sql_variant gegevenstype gebruiken voor meer informatie over sql_variant gegevenstype.

Ruimtelijke gegevenstypen

Zie Ruimtelijke gegevenstypen gebruiken voor informatie over typen ruimtelijke gegevens.

JSON-gegevenstype

Zie JSON-gegevenstype voor informatie over het JSON-gegevenstype.

Vectorgegevenstype

Zie Vector-gegevenstype voor informatie over vectorgegevenstype.

Zie ook

Informatie over de gegevenstypen van het JDBC-stuurprogramma