2012-10-10 16 views
7

Sto utilizzando SQL Server. La mia tabella ha una colonna con il tipo di dati datetime2.Ottenere il tipo di dati di una colonna ResultSet

Sto accedendo ai dati della tabella utilizzando ResultSet. Ho bisogno di ottenere il tipo di dati di una colonna. Il metodo rs.getColumnTypeName() restituisce nvarchar per il tipo di dati di database datetime2.

C'è un modo per ottenere datetime2 o Timestamp per lo stesso?

+0

un'occhiata a http://stackoverflow.com/a/220226/579580 – aviad

+0

Ciao, il problema riscontrato è molto probabilmente legati al driver JDBC di SQL Server che si sta utilizzando. Scaricare l'ultima versione 6.0 di tipo 4.2, se possibile. In questa versione del driver SQL Server sarà possibile ottenere: (a) metaData.getColumnType = 93 - in 2.0 si -9 (b) metaData.getColumnClassName (...)/java.sql.Timestamp. In breve, datetime2 non è supportato correttamente dalla versione 2.0 del driver. Quindi non dovresti usare datetime2 con quella versione di driver più vecchia. Prova ad aggiornare per ottenere i metadati e i risultati corretti. – 99Sono

risposta

10

Se lo si fa in Java, esiste una classe ResultSetMetaData.

È possibile utilizzare ResultSetMetaData.getColumnClassName() per ottenere il nome completo della classe.

Ad esempio, se il tipo di dati nel database è VARCHAR, il valore restituito è java.lang.String.

Prova anche a utilizzare ResultSetMetaData.getColumnLabel() - verificare se è applicabile nel tuo caso.

Java Documentation for ResultSetMetaData

+0

Puoi anche ottenere il valore intero da 'ResultSetMetaData.getColumnType()' e confrontarlo con una delle costanti in 'java.sql.Types' per verificare se si tratta di un tipo particolare. Questo è più vicino allo schema del database stesso, in quanto è possibile distinguere tra vari tipi di database (ad es. 'NVARCHAR',' VARCHAR', 'INTEGER',' NUMERIC') che si risolvono tutti nello stesso tipo di Java (es. 'String',' int '). – ADTC

+0

Il suo problema credo sia che i metadati non abbiano senso per la colonna DB attuale. La colonna sqlserver di Microsft è un DATETIME2. Ma nonostante ciò, il tipo restituito dal gruppo di risultati è una "stringa" e il tipo per la colonna è nvarchar. Questo è probabilmente un bug con la versione del driver JDBC (ad esempio, la versione 2 del driver JDBC) – 99Sono

Problemi correlati