Подтвердить что ты не робот

Является ли JDBC ResultSet getString всегда возвращать представление String?

Я форматирую 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 или возвращать значение null, когда getXXX даст мне значение?

4b9b3361

Ответ 1

Yup, проверьте это: 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 может дать другой результат.

Ответ 2

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

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

Я бы предположил, что вы сделаете это вместо этого:

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

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