2012-05-08 7 views
2

В настоящее время драйвер jTDS JDBC (1.2.5) для Microsoft SQL Server 2008 неправильно сообщает тип данных для столбцов DATE как NVARCHAR.jTDS неправильно сообщает информацию о типе данных в метаданных набора результатов (для столбцов DATE, отчетов NVARCHAR)

Это, вероятно, ведет себя так же, как для более ранних версий jTDS и SQL Server (2005, 2000)

  • Существуют ли какие-либо обходные пути для этого, которые не требуют переключения на другой драйвер (например, Microsoft, собственный драйвер) или исправление драйвера jTDS?

  • Кроме того, я хотел бы избежать необходимости выполнения запросов к словарю данных (INFORMATION_SCHEMA.COLUMNS зрения и т.д.) для поиска информации о типе данных (и, возможно, перекрестных ссылок на выходе "Exec sp_datatype_info "для того, чтобы получить типы данных SQL)

быстрое прочтение jTDS выдающихся ошибок не указывают ли это будет исправлено или нет.

Ответ на этот вопрос: JDBC - JTDS bug ? For columns of type date and time(x), кажется, указывает, что это не происходит в SQL Server 2005.

Спасибо заранее.

+0

+1 У меня также такая же проблема. Любое решение для этого? –

ответ

1

Я нашел решение с условием

metaData.getColumnType(columnNumber) == 12

, если это условие выполнено, выполнить запрос

SELECT System_Type_Id FROM Sys.Columns WHERE Name = [column name] AND Object_Id = (SELECT Object_Id FROM Sys.Tables WHERE Name = [table name])

для smalldatetime он будет возвращать 58

и для datetime он вернется 61.

+1

Интересная находка. К сожалению, вышеприведенное условие также оценило бы true, если есть VARCHAR (или NVCHARCHAR), для которого требуется 10 байт памяти (getPrecision() для столбца VARCHAR вернет число байтов хранения vs getColumnDisplaySize(), которое вернет длину). – SuperPomodoro

+0

http://techierg.blogspot.com/2014/05/jtds-is-returns-nvarchar-for-datetime.html –