Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
JDBC-stuurprogramma downloaden
Vanaf versie 6.3.0 ondersteunt het JDBC-stuurprogramma het sql_variant gegevenstype. Sql_variant wordt ook ondersteund bij het gebruik van functies zoals Table-Valued Parameters en BulkCopy, met enkele beperkingen. Niet alle gegevenstypen kunnen worden opgeslagen in het sql_variant gegevenstype. Zie sql_variant (Transact-SQL) voor een lijst met ondersteunde gegevenstypen met sql_variant.
Een tabel invullen en ophalen
Ervan uitgaande dat er een tabel is met een sql_variant kolom als:
CREATE TABLE sampleTable (col1 sql_variant)
Een voorbeeldscript voor het invoegen van waarden met behulp van een statement:
try (Statement stmt = connection.createStatement()){
stmt.execute("insert into sampleTable values (1)");
}
Waarde invoegen met behulp van voorbereide statement:
try (PreparedStatement preparedStatement = con.prepareStatement("insert into sampleTable values (?)")) {
preparedStatement.setObject(1, 1);
preparedStatement.execute();
}
Als het onderliggende type van de doorgegeven gegevens bekend is, kan de respectieve setter worden gebruikt. Kan bijvoorbeeld preparedStatement.setInt() worden gebruikt bij het invoegen van een geheel getal.
try (PreparedStatement preparedStatement = con.prepareStatement("insert into table values (?)")) {
preparedStatement.setInt (1, 1);
preparedStatement.execute();
}
Voor het lezen van waarden uit de tabel kunnen de respectieve getters worden gebruikt. U kunt bijvoorbeeld getInt()getString() methoden gebruiken als de waarden die afkomstig zijn van de server bekend zijn:
try (SQLServerResultSet resultSet = (SQLServerResultSet) stmt.executeQuery("select * from sampleTable ")) {
resultSet.next();
resultSet.getInt(1); //or rs.getString(1); or rs.getObject(1);
}
Opgeslagen procedures gebruiken met sql_variant
Een opgeslagen procedure hebben, zoals:
String sql = "CREATE PROCEDURE " + inputProc + " @p0 sql_variant OUTPUT AS SELECT TOP 1 @p0=col1 FROM sampleTable ";
Uitvoerparameters moeten worden geregistreerd:
try (CallableStatement callableStatement = con.prepareCall(" {call " + inputProc + " (?) }")) {
callableStatement.registerOutParameter(1, microsoft.sql.Types.SQL_VARIANT);
callableStatement.execute();
}
Beperkingen van sql_variant
Wanneer u TVP gebruikt om een tabel te vullen met een
datetime/smalldatetime/datewaarde die is opgeslagen in een sql_variant, werkt het aanroepengetDateTime()/getSmallDateTime()/getDate()van een ResultSet niet en wordt de volgende uitzondering gegenereerd:Java.lang.String cannot be cast to java.sql.TimestampTijdelijke oplossing: gebruik
getString()ofgetObject()in plaats daarvan.Het gebruik van een Tabelwaardaparameter (TVP) om een tabel in te vullen en een null-waarde in een SQL_variant te verzenden, wordt niet ondersteund. Dit resulteert in een uitzondering:
Inserting null value with column type sql_variant in TVP is not supported.
Zie ook
Informatie over de gegevenstypen van het JDBC-stuurprogramma