Basisgegevenstypen gebruiken

JDBC-stuurprogramma downloaden

Het Microsoft JDBC-stuurprogramma voor SQL Server maakt gebruik van de basisgegevenstypen JDBC om de SQL Server-gegevenstypen te converteren naar een indeling die wordt begrepen door de Java-programmeertaal en omgekeerd. Het JDBC-stuurprogramma biedt ondersteuning voor de JDBC 4.0-API, waaronder het gegevenstype SQLXML en nationale gegevenstypen (Unicode), zoals NCHAR, NVARCHAR, LONGNVARCHAR en NCLOB.

Toewijzingen van gegevenstypen

De volgende tabel bevat de standaardtoewijzingen tussen de standaardgegevenstypen SQL Server, JDBC en Java-programmeertaal:

SQL Server-typen JDBC-typen (java.sql.Types) Java-taaltypen
bigint BIGINT long
binair BINARY byte[]
bit BIT booleaan
verkolen VERKOLEN String
date DATE java.sql.Date
datum/tijd3 TIMESTAMP java.sql.Timestamp
datetime2 TIMESTAMP java.sql.Timestamp
datetimeoffset2 microsoft.sql.Types.DATETIMEOFFSET microsoft.sql.DateTimeOffset
decimal DECIMAAL java.math.BigDecimal
zweven DUBBEL dubbel
meetkunde VARBINARY byte[]
geografie VARBINARY byte[]
beeld LONGVARBINARY byte[]
int INTEGER int
json microsoft.sql.Types.JSON String
geld DECIMAAL java.math.BigDecimal
nchar VERKOLEN

NCHAR (Java SE 6.0)
String
ntekst LONGVARCHAR

LONGNVARCHAR (Java SE 6.0)
String
numeriek NUMERIEK java.math.BigDecimal
nvarchar VARCHAR

NVARCHAR (Java SE 6.0)
String
nvarchar(max) VARCHAR

NVARCHAR (Java SE 6.0)
String
real WERKELIJK zweven
smalldatetime TIMESTAMP java.sql.Timestamp
smallint SMALLINT kort
smallmoney DECIMAAL java.math.BigDecimal
sqlvariant microsoft.sql.Types.SQL_VARIANT Object
Tekst LONGVARCHAR String
time TIJD1 java.sql.Time1
tijdstempel BINARY byte[]
tinyint TINYINT kort
udt VARBINARY byte[]
uniqueidentifier VERKOLEN String
varbinary VARBINARY byte[]
varbinary(max) VARBINARY byte[]
varchar VARCHAR String
varchar(max) VARCHAR String
vector microsoft.sql.Types.VECTOR microsoft.sql.Vector
xml LONGVARCHAR

LONGNVARCHAR (Java SE 6.0)
String

SQLXML

1 Als u java.sql.Time wilt gebruiken met het tijdstype SQL Server, moet u de eigenschap sendTimeAsDatetime-verbinding instellen op false.

2 U kunt programmatisch toegang krijgen tot waarden van datetimeoffset met de klasse DateTimeOffset.

3 java.sql.Timestamp-waarden kunnen niet meer worden gebruikt om waarden uit een datum/tijd-kolom te vergelijken vanaf SQL Server 2016. Deze beperking wordt veroorzaakt door een wijziging aan de serverzijde die datum/tijd op een andere manier converteert naar datum/tijd2, wat resulteert in niet-gelijke waarden. De tijdelijke oplossing voor dit probleem is om datum/tijd-kolommen te wijzigen in datetime2(3), tekenreeks te gebruiken in plaats van java.sql.Timestamp of databasecompatibiliteitsniveau te wijzigen in 120 of lager.

De volgende secties bevatten voorbeelden van hoe u het JDBC-stuurprogramma en de basisgegevenstypen kunt gebruiken. Zie Het voorbeeld basisgegevenstypen voor een gedetailleerdere voorbeeld van het gebruik van de basisgegevenstypen in een Java-toepassing.

Gegevens ophalen als een tekenreeks

Gebruik de getString-methode van de klasse SQLServerResultSet om waarden te lezen die zijn toegewezen aan een JDBC-basistype als tekenreeks of wanneer een sterk getypte waarde niet is vereist. In het volgende voorbeeld ziet u dit gebruik:

try(Statement stmt = con.createStatement();) {
    ResultSet rs = stmt.executeQuery("SELECT lname, job_id FROM employee WHERE (lname = 'Brown')");
    rs.next();
    short empJobID = rs.getString("job_id");
}

Gegevens ophalen op gegevenstype

Als u gegevens moet ophalen uit een gegevensbron en u weet welk type gegevens wordt opgehaald, gebruikt u een van de get-methoden<> van de klasse SQLServerResultSet, ook wel bekend als de getter-methoden. U kunt een kolomnaam of een kolomindex gebruiken met de<get Type-methoden> , zoals in het volgende voorbeeld:

try(Statement stmt = con.createStatement();) {
    ResultSet rs = stmt.executeQuery("SELECT lname, job_id FROM employee WHERE (lname = 'Brown')");
    rs.next();
    short empJobID = rs.getShort("job_id");
}

Opmerking

De getUnicodeStream en getBigDecimal met schaalmethoden zijn afgeschaft en worden niet ondersteund door het JDBC-stuurprogramma.

Gegevens bijwerken op gegevenstype

Als u de waarde van een veld in een gegevensbron moet bijwerken, gebruikt u een van de updatetypemethoden<> van de klasse SQLServerResultSet. In het volgende voorbeeld wordt de updateInt-methode gebruikt met de updateRow-methode om de gegevens in de gegevensbron bij te werken:

try (Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);) {
    ResultSet rs = stmt.executeQuery("SELECT lname, job_id FROM employee WHERE (lname = 'Brown')");
    rs.next();
    int empJobID = rs.getInt(2);
    empJobID++;
    rs.first();
    rs.updateInt(2, empJobID);
    rs.updateRow();
}

Opmerking

Het JDBC-stuurprogramma kan een SQL Server-kolom niet bijwerken met een kolomnaam van meer dan 127 tekens. Als een update naar een kolom met meer dan 127 tekens wordt geprobeerd, wordt er een uitzondering gegenereerd.

Gegevens bijwerken op geparameteriseerde query

Als u gegevens in een gegevensbron bijwerkt met behulp van een geparameteriseerde query, kunt u het gegevenstype van de parameters instellen met behulp van een van de settypemethoden<> van de klasse SQLServerPreparedStatement. Deze methoden worden ook wel settermethoden genoemd. In het volgende voorbeeld wordt de methode prepareStatement gebruikt om de geparameteriseerde query vooraf te compileren en vervolgens wordt de methode setString gebruikt om de tekenreekswaarde van de parameter in te stellen voordat de executeUpdate-methode wordt aangeroepen.

try(PreparedStatement pstmt = con.prepareStatement("UPDATE employee SET fname = ? WHERE (lname = 'Brown')");) {
    String name = "Bob";
    pstmt.setString(1, name);
    int rowCount = pstmt.executeUpdate();
}

Zie Een SQL-instructie gebruiken met parameters voor meer informatie over geparameteriseerde query's.

Parameters doorgeven aan een opgeslagen procedure

Als u getypte parameters moet doorgeven aan een opgeslagen procedure, kunt u de parameters instellen op index of naam met behulp van een van de ingestelde<typemethoden> van de klasse SQLServerCallableStatement . In het volgende voorbeeld wordt de prepareCall-methode gebruikt om de aanroep naar de opgeslagen procedure in te stellen en vervolgens wordt de methode setString gebruikt om de parameter voor de aanroep in te stellen voordat de executeQuery-methode wordt aangeroepen.

try(CallableStatement cstmt = con.prepareCall("{call employee_jobid(?)}");) {
    String lname = "Brown";
    cstmt.setString(1, lname);
    ResultSet rs = cstmt.executeQuery();
}

Opmerking

In dit voorbeeld wordt een resultatenset geretourneerd met de resultaten van het uitvoeren van de opgeslagen procedure.

BigDecimal

Wanneer u BigDecimale parameterwaarden gebruikt, kan de precisie en schaal samen met de waarde worden doorgegeven via setBigDecimal. Op setBigDecimal deze manier voorkomt u dat potentiƫle waarden worden afgekapt. Als de verbindingsreeksoptie calcBigDecimalPrecision is ingesteld op true, berekent het stuurprogramma ook precisie voor de BigDecimale invoer namens de gebruiker, ten koste van de prestaties. Als de waarde alleen wordt doorgegeven, zonder calcBigDecimalPrecision in te stellen of als de optie is ingesteld falseop, gaat het stuurprogramma uit van de maximaal toegestane waarde (38) voor precisie voor die BigDecimale waarde.

Zie Een opgeslagen procedure gebruiken met invoerparameters voor meer informatie over het gebruik van het JDBC-stuurprogramma met opgeslagen procedures en invoerparameters.

Parameters ophalen uit een opgeslagen procedure

Als u parameters moet ophalen uit een opgeslagen procedure, moet u eerst een out parameter registreren op naam of index met behulp van de methode registerOutParameter van de klasse SQLServerCallableStatement. Wijs vervolgens de geretourneerde parameter toe aan een geschikte variabele nadat u de aanroep naar de opgeslagen procedure hebt uitgevoerd. In het volgende voorbeeld wordt de prepareCall-methode gebruikt voor het instellen van de aanroep naar de opgeslagen procedure, wordt de methode registerOutParameter gebruikt om de out parameter in te stellen. Vervolgens wordt de methode setString gebruikt om de parameter voor de aanroep in te stellen voordat de executeQuery-methode wordt aangeroepen. De waarde van de out parameter van de opgeslagen procedure wordt opgehaald met behulp van de methode getShort .

try(CallableStatement cstmt = con.prepareCall("{call employee_jobid (?, ?)}");) {
    cstmt.registerOutParameter(2, java.sql.Types.SMALLINT);
    String lname = "Brown";
    cstmt.setString(1, lname);
    ResultSet rs = cstmt.executeQuery();
    short empJobID = cstmt.getShort(2);
}

Opmerking

Naast de geretourneerde parameter kan er ook een resultatenset worden geretourneerd met de resultaten van het uitvoeren van de opgeslagen procedure.

Zie Een opgeslagen procedure gebruiken met uitvoerparameters voor meer informatie over het gebruik van het JDBC-stuurprogramma met opgeslagen procedures en uitvoerparameters.

Zie ook

Informatie over de gegevenstypen van het JDBC-stuurprogramma