2010-01-15 65 views
17

Tôi đang định dạng ResultSet để xuất ra tệp CSV. Vì vậy, tôi thực sự không quan tâm về các loại Java của tập kết quả, ngoài có thể biết nếu đó là văn bản hoặc số.Liệu JDBC ResultSet getString có luôn trả về một biểu diễn String không?

Đảm bảo JDBC getString sẽ luôn đưa ra một chuỗi các giá trị, ít nhất cho các giá trị đơn lẻ (tôi không cần quan tâm đến mình về java.sql.Types.ARRAY, java.sql.Types.JAVA_OBJECT và một số khác).

ví dụ: được cung cấp resultSetMetaData.getColumnType(i)Types.FLOAT hoặc Types.BIGDECIMAL. sẽ rs.GetString(i) luôn mang lại một số Chuỗi?

tức là có trường hợp getString sẽ ném SQLException hoặc trả về null khi getXXX đưa cho tôi giá trị không?

Trả lời

11

Yup, kiểm tra này: http://java.sun.com/docs/books/tutorial/jdbc/basics/retrieving.html

JDBC cho phép rất nhiều vĩ độ như xa như mà getXXX phương pháp bạn có thể sử dụng để lấy các loại SQL khác nhau. Ví dụ, phương thức getInt có thể được sử dụng để lấy bất kỳ kiểu số hoặc kiểu ký tự nào. Dữ liệu mà nó truy xuất sẽ được chuyển thành một int; tức là, nếu kiểu SQL là VARCHAR, thì JDBC sẽ cố phân tích một số nguyên ra khỏi VARCHAR. Tuy nhiên, phương thức getInt được khuyến khích chỉ truy xuất các kiểu SQL INTEGER và nó không thể được sử dụng cho các kiểu SQL BINARY, VARBINARY, LONGVARBINARY, DATE, TIME hoặc TIMESTAMP.

Nhưng hãy cẩn thận, trình điều khiển JDBC khác nhau có thể mang lại kết quả khác nhau.

+0

** Cập nhật trên hướng dẫn được liên kết: ** 'Lưu ý rằng mặc dù phương thức getString được khuyến khích để truy xuất các kiểu SQL CHAR và VARCHAR, có thể truy xuất bất kỳ kiểu SQL cơ bản nào với nó. Bắt tất cả các giá trị với getString có thể rất hữu ích, nhưng nó cũng có những hạn chế của nó. Ví dụ, nếu nó được sử dụng để lấy một kiểu số, getString sẽ chuyển đổi giá trị số thành một đối tượng Java String, và giá trị phải được chuyển đổi về kiểu số trước khi nó có thể hoạt động như một số. Trong trường hợp giá trị được xử lý dưới dạng chuỗi, thì không có nhược điểm nào. – Nefreo

5

java.lang.String là lớp cuối cùng - không thể bao giờ có lớp con. Vì vậy, bất kỳ phương thức nào trả về String sẽ trả về một phiên bản của lớp java.lang.String hoặc null hoặc ném một ngoại lệ.

Để chuyển đổi, tùy thuộc vào trình điều khiển JDBC nếu nó cho phép bạn chuyển đổi từ các loại không phải Chuỗi. Tôi nghi ngờ nhiều người sẽ có một vấn đề với nó.

tôi sẽ đề nghị rằng bạn làm điều này thay vì:

Object item = resultSet.getObject(i); 
String strValue = (item == null ? null : item.toString()); 

Đó nên mạnh mẽ hơn, vì getObject() sẽ luôn luôn làm những điều hợp lý.

+0

Hoặc ném 'SQLException' – kdgregory

+3

Và đó là câu hỏi, có trường hợp getString sẽ ném một SQLException hoặc trả về null khi getXXX đưa cho tôi giá trị không? – Anonym

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