2012-10-10 72 views
7

Tôi đang sử dụng SQL Server. Bảng của tôi có một cột có kiểu dữ liệu datetime2.Lấy kiểu dữ liệu của cột ResultSet

Tôi đang truy cập dữ liệu bảng bằng cách sử dụng ResultSet. Tôi cần lấy kiểu dữ liệu của một cột. Phương thức rs.getColumnTypeName() trả về nvarchar cho kiểu dữ liệu cơ sở dữ liệu datetime2.

Có cách nào để nhận datetime2 hoặc Timestamp không?

+0

hãy nhìn vào http://stackoverflow.com/a/220226/579580 – aviad

+0

Hi, vấn đề bạn đang gặp rất có thể liên quan đến trình điều khiển JDBC của SQL Server bạn đang sử dụng. Tải xuống phiên bản mới nhất 6.0 loại 4.2, nếu có thể. Trong phiên bản này của trình điều khiển máy chủ SQL, bạn sẽ có thể nhận được: (a) metaData.getColumnType = 93 - trong 2.0 bạn -9 (b) metaData.getColumnClassName (...)/java.sql.Timestamp. Tóm lại, datetime2 không được trình điều khiển 2.0 hỗ trợ đúng cách. Vì vậy, bạn không nên sử dụng datetime2 với phiên bản trình điều khiển cũ hơn đó. Hãy thử nâng cấp để nhận siêu dữ liệu và kết quả phù hợp. – 99Sono

Trả lời

10

Nếu bạn đang làm điều đó trong Java, có một lớp học ResultSetMetaData.

Bạn có thể sử dụng ResultSetMetaData.getColumnClassName() để nhận tên đầy đủ của lớp học.

Ví dụ: nếu kiểu dữ liệu trong cơ sở dữ liệu là VARCHAR, giá trị được trả về là java.lang.String.

Cũng thử sử dụng ResultSetMetaData.getColumnLabel() - xem liệu nó có thể áp dụng trong trường hợp của bạn hay không.

Java Documentation for ResultSetMetaData

+0

Bạn cũng có thể lấy giá trị số nguyên từ 'ResultSetMetaData.getColumnType()' và so sánh nó với một trong các hằng số trong 'java.sql.Types' để kiểm tra xem nó có phải là một kiểu cụ thể hay không. Điều này gần gũi hơn với chính lược đồ cơ sở dữ liệu vì bạn có thể phân biệt giữa các kiểu cơ sở dữ liệu khác nhau (ví dụ: 'NVARCHAR',' VARCHAR', 'INTEGER',' NUMERIC') mà tất cả đều giải quyết cho cùng một kiểu Java (ví dụ 'String',' int '). – ADTC

+0

Vấn đề của ông tôi tin là siêu dữ liệu không có ý nghĩa đối với cột DB thực tế. Cột microsft sqlserver là DATETIME2. Nhưng mặc dù vậy, kiểu trả về của resultset là một "chuỗi" và kiểu cho cột là nvarchar. Đây có thể là lỗi với phiên bản trình điều khiển JDBC (ví dụ: phiên bản trình điều khiển JDBC 2) – 99Sono

Các vấn đề liên quan