Всегда ли JDBC ResultSet getString возвращает строковое представление? - PullRequest
18 голосов
/ 15 января 2010

Я форматирую ResultSet для вывода в файл CSV. Таким образом, я действительно не волнуюсь о типах Java набора результатов, за исключением, возможно, знания, является ли это текстом или числами.

Гарантирует ли JDBC, что getString всегда будет давать строковое представление значений, по крайней мере, для отдельных значений (мне не нужно беспокоиться о java.sql.Types.ARRAY, java.sql.Types.JAVA_OBJECT и некоторых других).

например. данный resultSetMetaData.getColumnType(i) является Types.FLOAT или Types.BIGDECIMAL. rs.GetString(i) всегда будет давать какую-то строку?

т.е. Существуют ли случаи, когда getString генерирует исключение SQLException или возвращает ноль, когда getXXX выдаст мне значение?

Ответы [ 2 ]

12 голосов
/ 15 января 2010

Да, проверьте это: http://java.sun.com/docs/books/tutorial/jdbc/basics/retrieving.html

JDBC допускает большую широту, насколько методы getXXX можно использовать для извлечения различных типов SQL. Например, метод getInt можно использовать для получения любого из числовых или символьных типов. Полученные данные будут преобразованы в int; то есть, если тип SQL VARCHAR, JDBC попытается проанализировать целое число из VARCHAR. Однако метод getInt рекомендуется для получения только типов SQL INTEGER, и его нельзя использовать для типов SQL BINARY, VARBINARY, LONGVARBINARY, DATE, TIME или TIMESTAMP.

Но будьте осторожны, другой драйвер JDBC может дать другой результат.

5 голосов
/ 15 января 2010

java.lang.String - последний класс - у него никогда не может быть подкласса. Поэтому любой метод, который возвращает String, либо возвратит экземпляр класса java.lang.String, либо null, либо выдаст исключение.

Что касается преобразования, это зависит от драйвера JDBC, если он позволит вам преобразовывать не-строковые типы. Я подозреваю, что у многих будет проблема с этим.

Я бы посоветовал вам сделать это вместо:

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

Это должно быть более надежным, поскольку getObject() всегда будет делать разумные вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...