Condividi tramite


Informazioni sulle conversioni dei tipi di dati

Per semplificare la conversione dei tipi di dati del linguaggio di programmazione Java nei tipi di dati SQL Server, nel driver JDBC per Microsoft SQL Server 2005 sono disponibili le conversioni dei tipi di dati richieste dalla specifica JDBC. Per offrire maggiore flessibilità, tutti i tipi sono convertibili da e verso i tipi di dati Object, String e byte[].

Conversioni dei metodi di richiamo

Sulla base dei tipi di dati SQL Server 2005, il grafico seguente contiene la mappa di conversione del driver JDBC per i metodi get<Type> della classe SQLServerResultSet e le conversioni supportate nei metodi get<Type> della classe SQLServerCallableStatement.

JDBCGetterConversions

Sono disponibili tre categorie standard di conversione supportate dai metodi di richiamo del driver JDBC:

  • Senza perdita di dati (x): Conversioni nei casi in cui il tipo di richiamo è inferiore o identico al tipo di server sottostante. Ad esempio, quando si esegue la chiamata a getBigDecimal in una colonna decimale del server sottostante, la conversione non è necessaria.

  • Convertito (y): Conversioni dai tipi di server numerico ai tipi di linguaggio Java in cui la conversione è regolare e segue le regole di conversione del linguaggio Java. In tali conversioni, la precisione viene sempre troncata, mai arrotondata, e l'overflow viene gestito come modulo del tipo di destinazione inferiore. Quando, ad esempio, si chiama getInt su una colonna decimal sottostante che contiene "1,9999" il valore restituito sarà "1", oppure se il valore decimal sottostante è "3000000000", il valore int causa un overflow in "-1294967296".

  • Dipendente dai dati (z): Le conversioni dai tipi di caratteri sottostanti in tipi numerici richiedono che i tipi di caratteri contengano valori che è possibile convertire in quel determinato tipo. Non vengono eseguite altre conversioni. Se è troppo grande per il tipo di richiamo, il valore non sarà valido. Se, ad esempio, viene chiamato getInt su una colonna varchar(50) che contiene "53", il valore viene restituito come int. Se invece il valore sottostante è "xyz" o "3000000000", viene generato un errore.

Conversioni dei metodi di impostazione

Per i dati Java tipizzati passati ai metodi update<Type> della classe SQLServerResultSet e ai metodi setObject<Type> della classe SQLServerPreparedStatement, si applicano le seguenti conversioni.

JDBCSetterConversions

Il metodo setObject senza alcun tipo di destinazione specificato utilizzerà il mapping predefinito. I metodi di impostazione tipizzati per i parametri, i metodi set<Type> della classe SQLServerPreparedStatement e i metodi set<Type> della classe SQLServerCallableStatement utilizzano anch'essi il mapping predefinito dei tipi di dati da Java a JDBC passando quindi il tipo al server. Il server cercherà di eseguire la conversione e restituirà degli errori in caso di esito negativo.

Nel caso del tipo di dati String, se il valore supera la lunghezza di VARCHAR, ne viene eseguito il mapping a LONGVARCHAR. Lo stesso vale per byte[]. I valori più lunghi di VARBINARY diventano LONGVARBINARY.

Sono disponibili due categorie standard di conversione supportate dai metodi di impostazione del driver JDBC:

  • Senza perdita di dati (x): conversioni nei casi numerici in cui il tipo di impostazione è inferiore o identico al tipo di server sottostante. Quando, ad esempio, si chiama setBigDecimal su una colonna decimal del server sottostante, la conversione non è necessaria. Per la conversione da un tipo numeric a un tipo character, il tipo di dati numeric Java viene convertito in String. Ad esempio, la chiamata a setDouble con un valore di "53" in una colonna varchar(50) produrrà un valore character "53" nella colonna di destinazione.

  • Convertito (y): Conversioni da un tipo numeric Java a un tipo numeric del server sottostante inferiore. Questa conversione è regolare e segue le convenzioni di conversione di SQL Server. La precisione è sempre troncata, mai arrotondata, e l'overflow genera un errore di conversione non supportata. Ad esempio, utilizzando updateDecimal con un valore di "1,9999" in una colonna integer sottostante verrà restituito "1" nella colonna di destinazione. Se invece viene passato "3000000000", il driver genererà un errore.

SQL Server consente di eseguire l'impostazione e l'aggiornamento bulk delle conversioni e restituirà gli errori al driver JDBC nel caso si siano verificati dei problemi. Le conversioni sul lato client non sono frequenti e vengono eseguite solo nel caso di valoridate, time, timestamp, Boolean e String.

Nel caso di updateObject e setObject, i metodi cercano il tipo dell'oggetto passato ed eseguono la chiamata al metodo di impostazione tipizzato appropriato.

Vedere anche

Altre risorse

Informazioni sui tipi di dati del driver JDBC