Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Från och med version 6.3.0 stöder JDBC-drivrutinen datatypen sql_variant. Sql_variant stöds också vid användning av funktioner som tabellvärdesparametrar och BulkCopy, med vissa begränsningar. Alla datatyper kan inte lagras i sql_variant datatypen. En lista över datatyper som stöds med sql_variant finns i sql_variant (Transact-SQL).
Fylla i och hämta en tabell
Förutsatt att en har en tabell med en sql_variant kolumn som:
CREATE TABLE sampleTable (col1 sql_variant)
Ett exempelskript för att infoga värden med ett påstående:
try (Statement stmt = connection.createStatement()){
stmt.execute("insert into sampleTable values (1)");
}
Infogar värde med hjälp av förberedd instruktion:
try (PreparedStatement preparedStatement = con.prepareStatement("insert into sampleTable values (?)")) {
preparedStatement.setObject(1, 1);
preparedStatement.execute();
}
Om den underliggande typen av data som skickas är känd kan respektive setter användas. Kan till exempel preparedStatement.setInt() användas när du infogar ett heltalsvärde.
try (PreparedStatement preparedStatement = con.prepareStatement("insert into table values (?)")) {
preparedStatement.setInt (1, 1);
preparedStatement.execute();
}
För att läsa värden från tabellen kan de respektive getter-metoderna användas. Du kan till exempel getInt()getString() använda metoder om värdena som kommer från servern är kända:
try (SQLServerResultSet resultSet = (SQLServerResultSet) stmt.executeQuery("select * from sampleTable ")) {
resultSet.next();
resultSet.getInt(1); //or rs.getString(1); or rs.getObject(1);
}
Använda lagrade procedurer med sql_variant
Ha en lagrad procedur, till exempel:
String sql = "CREATE PROCEDURE " + inputProc + " @p0 sql_variant OUTPUT AS SELECT TOP 1 @p0=col1 FROM sampleTable ";
Utdataparametrar måste registreras:
try (CallableStatement callableStatement = con.prepareCall(" {call " + inputProc + " (?) }")) {
callableStatement.registerOutParameter(1, microsoft.sql.Types.SQL_VARIANT);
callableStatement.execute();
}
Begränsningar för sql_variant
När du använder TVP för att fylla i en tabell med ett
datetime/smalldatetime/datevärde som lagras i en sql_variant fungerar det inte att anropagetDateTime()/getSmallDateTime()/getDate()en ResultSet och genererar följande undantag:Java.lang.String cannot be cast to java.sql.TimestampLösning: använd
getString()ellergetObject()i stället.Det går inte att använda TVP för att fylla i en tabell och skicka ett null-värde i en sql_variant. Om du försöker göra det resulterar det i ett undantag:
Inserting null value with column type sql_variant in TVP is not supported.