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.
För att underlätta konverteringen av java-programmeringsspråkdatatyper till SQL Server-datatyper tillhandahåller Microsoft JDBC-drivrutinen för SQL Server datatypkonverteringar enligt JDBC-specifikationen. För ökad flexibilitet kan alla typer konverteras till och från datatyperna Object, String och byte[].
Anmärkning
När du använder Always Encrypted måste särskilda överväganden göras kring datatypskonverteringar. Mer information finns i Konverteringsfel för datatyper som inte stöds.
Getter-metodkonverteringar
Baserat på SQL Server-datatyperna innehåller följande diagram JDBC-drivrutinens konverteringskarta för get Type<()-metoderna för>KLASSEN SQLServerResultSet och de konverteringar som stöds för get Type-metoderna< för>klassen SQLServerCallableStatement.
Det finns tre kategorier av konverteringar som stöds av JDBC-drivrutinens gettermetoder:
Fri från förlust (x): Konverteringar för fall där getter-typens storlek är samma eller mindre än den underliggande servertypens storlek. När du till exempel anropar getBigDecimal på en underliggande server decimalkolumn krävs ingen konvertering.
Konverterad (y): Konverteringar från numeriska servertyper till Java-språktyper där konverteringen är vanlig och följer javaspråkkonverteringsregler. För dessa konverteringar trunkeras precisionen alltid – aldrig avrundas – och överflöd hanteras som modulo av måltypen, som är mindre. Om du till exempel anropar getInt på en underliggande decimalkolumn som innehåller "1,9999" returneras "1", eller om det underliggande decimalvärdet är "30000000000" så flödar int-värdet över till "-1294967296".
Databeroende (z): Konverteringar från underliggande teckentyper till numeriska typer kräver att teckentyperna innehåller värden som kan konverteras till den typen. Inga andra konverteringar utförs. Om värdet är för stort för gettertypen är värdet inte giltigt. Om getInt till exempel anropas för en varchar(50)-kolumn som innehåller "53" returneras värdet som en int. men om det underliggande värdet är "xyz" eller "3000000000" genereras ett fel.
Om getString anropas för datatypen binär, varbinär, varbinary(max) eller bildkolumn returneras värdet som ett hexadecimalt strängvärde.
Uppdateringsmetodkonverteringar
För Java-typdata som överförs till uppdateringsmetoderna<Type>() för klassen SQLServerResultSet gäller följande konverteringar.
Det finns tre kategorier av konverteringar som stöds av JDBC-drivrutinens uppdateringsmetoder:
Förlustfri (x): Konverteringar för fall där typ av uppdaterare är samma eller mindre än den underliggande servertypen. När du till exempel anropar updateBigDecimal på serverns decimalkolumn, behövs ingen konvertering.
Konverterad (y): Konverteringar från numeriska servertyper till Java-språktyper där konverteringen är vanlig och följer javaspråkkonverteringsregler. För dessa konverteringar är precisionen alltid avkortad (aldrig avrundad) och överflöde behandlas som modulo på målet (den mindre) typen. Om du till exempel anropar updateDecimal i en underliggande int-kolumn som innehåller "1,9999" returneras "1", eller om det underliggande decimalvärdet är "30000000000" så flödar int-värdet över till "-1294967296".
Databeroende (z): Konverteringar från underliggande källdatatyper till måldatatyper kräver att de inneslutna värdena kan konverteras till måltyperna. Inga andra konverteringar utförs. Om värdet är för stort för gettertypen är värdet inte giltigt. Om updateString till exempel anropas på en int-kolumn som innehåller "53" lyckas uppdateringen. men om det underliggande strängvärdet är "foo" eller "3000000000" genereras ett fel.
När updateString anropas på en datatyp för binär, varbinär, varbinary(max) eller bildkolumn hanterar den strängvärdet som ett hexadecimalt strängvärde.
När SQL Server-kolumndatatypen är XML måste datavärdet vara en giltig XML. När du anropar updateBytes, updateBinaryStream eller updateBlob-metoder ska datavärdet vara den hexadecimala strängrepresentationen av XML-tecknen. Till exempel:
<hello>world</hello> = 0x3C68656C6C6F3E776F726C643C2F68656C6C6F3E
Observera att ett byteordningsmärke (BOM) krävs om XML-tecknen är i specifika teckenkodningar.
Omvandlingar av settermetoder
För Java-typdata som skickas till de angivna<Type>()-metoderna för klassen SQLServerPreparedStatement och klassen SQLServerCallableStatement gäller följande konverteringar.
Servern undersöker alla möjliga konverteringar och returnerar fel vid misslyckande.
Om värdet överskrider varchar-längden för datatypen Sträng mappas det till LONGVARCHAR. På samma sätt mappar NVARCHAR till LONGNVARCHAR om värdet överskrider längden på NVARCHAR som stöds. Detsamma gäller för byte[]. Värden som är längre än VARBINARY blir LONGVARBINARY.
Det finns två kategorier av konverteringar som stöds av JDBC-drivrutinens sättermetoder:
Förlustfri (x): Konverteringar för numeriska fall där settertypen är lika eller mindre än den underliggande servertypen. När du till exempel anropar setBigDecimal på en underliggande server decimalkolumn krävs ingen konvertering. För numeriska till textkonverteringar konverteras den numeriska Java-datatypen till en String. Om du till exempel anropar setDouble med värdet "53" i en kolumn med varchar(50) skapas ett teckenvärde "53" i målkolumnen.
Konverterad (y): Konverteringar från en numerisk Java-typ till en underliggande servernumerisk typ som är mindre. Den här konverteringen är vanlig och följer SQL Server-konverteringskonventionerna. Precisionen trunkeras alltid (avrundas aldrig) och spill genererar ett konverteringsfel som inte stöds. Om du till exempel använder updateDecimal med värdet "1,9999" i en underliggande heltalskolumn resulterar det i "1" i målkolumnen. men om "30000000000" skickas genererar drivrutinen ett fel.
Databeroende (z): Konverteringar från en Java-strängtyp till den underliggande SQL Server-datatypen beror på följande villkor: Drivrutinen skickar strängvärdet till SQL Server och SQL Server utför konverteringar om det behövs. Om sendStringParametersAsUnicode är satt till true och den underliggande SQL Server-datatypen är image, tillåter SQL Server inte konvertering av nvarchar till image och genererar en SQLServerException. Om sendStringParametersAsUnicode är inställt på false och den underliggande SQL Server-datatypen är image tillåter SQL Server konvertering av varchar till image utan att generera ett undantag.
SQL Server utför konverteringarna och skickar tillbaka fel till JDBC-drivrutinen när det finns problem.
När SQL Server-kolumndatatypen är XML måste datavärdet vara en giltig XML. När du anropar updateBytes, updateBinaryStream eller updateBlob-metoder ska datavärdet vara den hexadecimala strängrepresentationen av XML-tecknen. Till exempel:
<hello>world</hello> = 0x3C68656C6C6F3E776F726C643C2F68656C6C6F3E
Observera att ett byteordningsmärke (BOM) krävs om XML-tecknen är i specifika teckenkodningar.
Konverteringar på setObject
Anmärkning
Microsoft JDBC Drivers 4.2 (och senare) för SQL Server stöder JDBC 4.1 och 4.2. Mer information om mappningar och konverteringar av datatyperna 4.1 och 4.2 finns i JDBC 4.1-efterlevnad för JDBC-drivrutinen och JDBC 4.2-efterlevnaden för JDBC-drivrutinen, utöver informationen nedan.
För java-typdata som skickas till setObject(<Type>)-metoderna i klassen SQLServerPreparedStatement gäller följande konverteringar.
SetObject-metoden utan någon angiven måltyp använder standardmappningen. Om värdet överskrider varchar-längden för datatypen Sträng mappas det till LONGVARCHAR. På samma sätt mappar NVARCHAR till LONGNVARCHAR om värdet överskrider längden på NVARCHAR som stöds. Detsamma gäller för byte[]. Värden som är längre än VARBINARY blir LONGVARBINARY.
Det finns tre kategorier av konverteringar som stöds av JDBC-drivrutinens setObject-metoder:
Förlustfri (x): Konverteringar för numeriska fall där settertypen är lika eller mindre än den underliggande servertypen. När du till exempel anropar setBigDecimal på en underliggande server decimalkolumn krävs ingen konvertering. För numeriska till textkonverteringar konverteras den numeriska Java-datatypen till en String. Om du till exempel anropar setDouble med värdet "53" i en kolumn med varchar(50) genereras ett teckenvärde "53" i målkolumnen.
Konverterad (y): Konverteringar från en numerisk Java-typ till en underliggande servernumerisk typ som är mindre. Den här konverteringen är vanlig och följer SQL Server-konverteringskonventionerna. Precisionen trunkeras alltid, avrundas aldrig och spill genererar ett konverteringsfel som inte stöds. Om du till exempel använder updateDecimal med värdet "1,9999" i en underliggande heltalskolumn resulterar det i "1" i målkolumnen. men om "30000000000" skickas genererar drivrutinen ett fel.
Databeroende (z): Konverteringar från en Java-strängtyp till den underliggande SQL Server-datatypen beror på följande villkor: Drivrutinen skickar strängvärdet till SQL Server och SQL Server utför konverteringar om det behövs. Om anslutningsegenskapen sendStringParametersAsUnicode är inställd på true och den underliggande SQL Server-datatypen är avbildning tillåter INTE SQL Server konvertering av nvarchar till avbildning och genererar en SQLServerException. Om sendStringParametersAsUnicode är inställt på false och den underliggande SQL Server-datatypen är image, tillåter SQL Server konvertera från varchar till image och genererar inget undantag.
SQL Server utför huvuddelen av uppsättningskonverteringarna och skickar tillbaka fel till JDBC-drivrutinen när det finns problem. Konverteringar på klientsidan är undantaget och utförs endast när det gäller värden för datum, tid, tidsstämpel, boolesk och sträng .
När SQL Server-kolumndatatypen är XML måste datavärdet vara en giltig XML. När du anropar setObject(byte[], SQLXML), setObject(inputStream, SQLXML) eller setObject(Blob, SQLXML) ska datavärdet vara den hexadecimala strängrepresentationen av XML-tecknen. Till exempel:
<hello>world</hello> = 0x3C68656C6C6F3E776F726C643C2F68656C6C6F3E
Observera att ett byteordningsmärke (BOM) krävs om XML-tecknen är i specifika teckenkodningar.