Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Począwszy od wersji 6.3.0, sterownik JDBC obsługuje typ danych sql_variant. Sql_variant jest również obsługiwany w przypadku korzystania z funkcji takich jak parametry tabelaryczne i narzędzie BulkCopy, z pewnymi ograniczeniami. Nie wszystkie typy danych mogą być przechowywane w typie danych sql_variant. Aby uzyskać listę obsługiwanych typów danych z sql_variant, zobacz sql_variant (Transact-SQL).
Wypełnianie i pobieranie tabeli
Zakładając, że tabela ma kolumnę sql_variant:
CREATE TABLE sampleTable (col1 sql_variant)
Przykładowy skrypt do wstawiania wartości przy użyciu instrukcji:
try (Statement stmt = connection.createStatement()){
stmt.execute("insert into sampleTable values (1)");
}
Wstawianie wartości przy użyciu przygotowanego zapytania:
try (PreparedStatement preparedStatement = con.prepareStatement("insert into sampleTable values (?)")) {
preparedStatement.setObject(1, 1);
preparedStatement.execute();
}
Jeśli znany jest bazowy typ przekazywanych danych, można użyć odpowiedniego settera. Na przykład preparedStatement.setInt() można użyć podczas wstawiania wartości całkowitej.
try (PreparedStatement preparedStatement = con.prepareStatement("insert into table values (?)")) {
preparedStatement.setInt (1, 1);
preparedStatement.execute();
}
Do odczytywania wartości z tabeli można użyć odpowiednich metod pobierania. Na przykład można użyć metod getInt() lub getString(), jeśli znane są wartości pochodzące z serwera:
try (SQLServerResultSet resultSet = (SQLServerResultSet) stmt.executeQuery("select * from sampleTable ")) {
resultSet.next();
resultSet.getInt(1); //or rs.getString(1); or rs.getObject(1);
}
Używanie procedur składowanych z sql_variant
Posiadanie procedury składowanej, takiej jak:
String sql = "CREATE PROCEDURE " + inputProc + " @p0 sql_variant OUTPUT AS SELECT TOP 1 @p0=col1 FROM sampleTable ";
Parametry wyjściowe muszą być zarejestrowane:
try (CallableStatement callableStatement = con.prepareCall(" {call " + inputProc + " (?) }")) {
callableStatement.registerOutParameter(1, microsoft.sql.Types.SQL_VARIANT);
callableStatement.execute();
}
Ograniczenia sql_variant
W przypadku wypełniania tabeli
datetime/smalldatetime/dateza pomocą TVP wartością przechowywaną w sql_variant, wywołaniegetDateTime()/getSmallDateTime()/getDate()na ResultSet nie działa i zgłasza następujący wyjątek:Java.lang.String cannot be cast to java.sql.TimestampObejście: użyj polecenia
getString()lubgetObject()zamiast tego.Używanie TVP do wypełniania tabeli i wysyłania wartości null w "sql_variant" nie jest obsługiwane. Próba wykonania tej czynności powoduje wyjątek:
Inserting null value with column type sql_variant in TVP is not supported.