HEAD>
| Contents | Prev | Next | JDBCTM Guide: Getting Started |
Этот механизм состоит из методов getXXX и
setXXX, метода registerOutParameter и класса
Types.
В этом разделе обсуждается все, что касается типов данных и их преобразование, а также приведены соответствующие таблицы преобразования типов.
LONG RAW, в Sybase он называетсяt IMAGE, в
Informix - BYTE, а в DB2 - LONG VARCHAR FOR BIT DATA.
К счастью, программистам не обязательно отягощать себя именами типов SQL, используемых в таблицах БД. Большую часть времени прораммисты создают программы над уже созданной структурой БД, и им не приходится заботиться о названиях типов данных, используемых при создании таблиц.
JDBC объявляет набор базовых типов SQL в классе java.sql.Types.
Эти типы отвечают наиболее типично используемые в БД типы данных. При
программировании с использованием JDBC API программисты могут использовать эти
JDBC-типы для обращения к базовым типам SQL незаботясь о том, какие имена типов
данных использовались при создании БД. Эти типы полностью описаны в следующем
разделе.
Наиболее типичный запрос, в котором существует необходимость использовать
имена типов данных, - это SQL-запрос создания таблицы CREATE TABLE.
Тут-то программист и должен позаботиться о правильном именовании типов данных.
Если Вам нужно описание типов данных, поддерживаемых Вашей СУБД, то справьтесь
об этом в документации к данной СУБД.
Если Вы хотите, чтобы Ваше приложение легко портировалось
на различные СУБД, Вы должны выбрать одно из двух: либо используйте широко
распространенные имена типов, такие как INTEGER,
NUMERIC или VARCHAR, которые будут работать с любой
СУБД, либо используйте метод java.sql.DatabaseMetaData.getTypeInfo
для получения информации о SQL-типах, поддерживаемых данной СУБД и выбора имени
SQL-типа, соответствующего определенному JDBC-типу.
JDBC определяет стандартное отображение JDBC-типов в
Java-типы. Например, INTEGER соответствует int.
Отображение позволяет манипулировать SQL-значениями с помощью типов данных языка
Java.
Совсем не обязательно, что Java-типы должны полностью совпадать с
JDBC-типами; они лишь должны быть способны без потерь сохранять и считывать
параметры и считывать результаты SQL-запросов. Например, Java-объект
String не совпадает в точности с JDBC-типами CHAR,
однако достаточен для сохранения полной информации о значениях типа
CHAR, VARCHAR и LONGVARCHAR.
CHAR
представляет из себя короткую строку с фиксированной длиной,
VARCHAR представляет из себя короткую строку с переменной длиной, а
LONGVARCHAR - длинную символьную строку с переменной длиной.
Тип данных SQL CHAR, соответствующий JDBC-типу
CHAR, определен в SQL-92 и поддерживается всеми СУБД. Он также
принимает параметр, равный длине сроки. Так, CHAR(12) определяет
12-символьную строку. Все основные СУБД поддерживают длину CHAR до
254 символов.
Тип данных VARCHAR тоже определен в SQL-92 и поддерживается
подавляющим большинством СУБД. Он принимает параметр, указывающий максимальную
длину строки. Так, VARCHAR(12) описывает строку, длина которой
может быть до 12 символов. В большинстве СУБД максимальная длина
VARCHAR составляет 254 символов. При присвоении переменной типа
VARCHAR строкового значения, БД запоминает длину этой строки и при
выборке значения возвратит в точности первоначальную строку.
К сожалению, в SQL не существует устоявшегося эквивалента
для типа LONGVARCHAR. Большинство СУБД поддерживают очень большие
строки длиной аж до гигабайта, но имена таких SQL-типов различаются.
Программист не обязан различать три типа строк JDBC - CHAR,
VARCHAR и LONGVARCHAR. Каждая строка может быть
выражена объектом Java String, и существует возможность читать и
писать SQL-операторы привильно не зная о том, какой именно из типов данных
используется.
CHAR, VARCHAR и
LONGVARCHAR должны отображаться либо в String, либо в
char[], но обычно именно String. Конвертирование из
String в char[] выполняется коструктором new String с параметром char[].
Обратное преобразование выполняется методом String.getChars().
Стоит остановиться на обработке строк фиксированной длины
CHAR(n). Эта обработка заклчается в том, что СУБД (или драйвер)
дополняет строку до нужной длины пробелами. Т.е. когда поле CHAR(n)
извлекается из БД, драйвер сконвертирует его в объект String с
длиной ровно n и пробелами в конце. И наоборот, когда объект
String записывается в поле CHAR(n), драйвер или СУБД
преоразует его, дополнив с конца пробелами до длины n.
Метод ResultSet.getString, используемый для типов данных
CHAR, VARCHAR и LONGVARCHAR, подходит для
извлечения нормальных данных, но будет нехорошо, если значение
LONGVARCHAR, занимающее несколько мегабайт, окажется в объекте
String. Поэтому интерфейс ResultSet позволяет программисту
извлекать значение LONGVARCHAR в виде потока ввода, из которого
можно последовательно считывать данные кусками любого размера. Методы
getAsciiStream и getUnicodeStream позволяют доставлять
данные, сохраненные в колонке типа LONGVARCHAR, в виде потока
Ascii- или Unicode-символов.
BINARY представляет собой маленький двойчный
объект с фиксированный длиной, VARBINARY представляет собой
маленький двойчный объект с переменной длиной, а LONGVARBINARY -
большой двоичный объект с переменной длиной.
К сожалению, использование этих типов не было стандартизовано, и различные СУБД поддерживают их в разнобой.
SQL-тип данных BINARY, соответствующий JDBC-типу
BINARY - это нестандартное расширение SQL и реализовано только в
некоторых СУБД. Этот тип принимает параметр, указывающий количество байтов.
Например, BINARY(12) описывает 12-байтный двоичный тип данных.
Обычно значения BINARY ограничены 254 байтами.
Тип SQL VARBINARY, соответствующий типу JDBC
VARBINARY - это тоже нестандартное расширение SQL, реализованное
только в некоторых СУБД. Он принимает параметр - максимальную длину
последовательности байтов. Т.о. VARBINARY(12) описывает двоичные
данные, чья длина может быть до 12-и байтов. Обычно значения
VARBINARY ограничены 254 байтами. При присвоении переменной
VARBINARY значения БД запоминает его длину, поэтому при выборке
значения получается в точности оригинальное значение.
К сожалению, для JDBC-типа LONGVARBINARY не существует
устойчивого SQL-эквивалента. Все основные СУБД поддерживают несколько видов
типов очень больших двоичных данных, поддерживая максимальную длину как минимум
гигабайт. При этом имена SQL-типов различаются.
BINARY, VARBINARY и
LONGVARBINARY могут быть выражены в виде массивов
byte[] в Java.
Для извлечении значений BINARY и
VARBINARY рекомендуется использовать метод
ResultSet.getBytes. Однако, если LONGVARBINARY хранит
много мегабайтов, то лучше использовать getBinaryStream, как и
случае с LONGVARCHAR. С помощью него можно считывать результат
покусочно.
BIT представляет собой один бит, который может принимать значения 0
или 1.
SQL-92 определяет тип данных BIT. В отличие от JDBC,
BIT в SQL-92 может использоваться как параметризованный тип данных
в виде двоичной строки с фиксированной длиной. SQL-92 также разрешает
использовать бит автономно, не в составе битовой строки - как раз то, что и
подразумевается под битом в JDBC. К сожалению, тип BIT требуется
только в полной спецификации SQL-92 и отсутствует во многих СУБД. В переносимом
коде предпочитается использовать тип JDBC SMALLINT, который
поддерживается всеми.
Рекомендуемое отображение для типа JDBC BIT
- это boolean в языке Java.
TINYINT представляет
собой 8-битное беззнаковое целое в диапазоне от 0 до 255.
Соответствующий тип в SQL, тоже TINYINT, в настоящее время
существует не во всех СУБД, поэтому лучше использовать SMALLINT.
Рекомендуемое отображение для типа JDBC TINYINT - это либо
byte, либо short. 8-битный byte является
знаковым целым от -128 до 127, поэтому нам не совсем подходит. Java-тип
short умещает в себе весь диапазон значений TINYINT,
поэтому лучше использовать именно его.
SMALLINT представляет собой 16-битное знаковое целое в диапазоне от
-32768 до 32767.
Соответствующий тип в SQL, SMALLINT, объявленный в SQL-92,
широко используется практически всеми СУБД.
Предпочтительным эквивалентом этого типа в языке Java является
short.
INTEGER представляет собой 32-разрядное знаковое целое в диапазоне
от -2147483648 до 2147483647.
Соответствующий SQL-тип INTEGER определен в SQL-92 и широко
используется всеми СУБД.
Предпочтительным эквивалентом типа INTEGER в Javе является
int.
BIGINT представляет собой 64-разрядное целое между
-9223372036854775808 и 9223372036854775807.
Соответствующий ему тип SQL BIGINT является нестандартным
расширением языка SQL. На практике этот тип данных не реализован в СУБД, поэтому
в портируемом коде рекомендуется избегать его использования.
Эквивалентом типа BIGINT в языке Java служит long.
REAL
представляет собой число с плавающей точкой одинарной точности, поддерживающее 7
разрядов в мантиссе.
Соответствующий тип в SQL REAL определен в SQL-92 и широко, если
не универсально, используется всеми СУБД.
Рекомендуемый эквивалент для типа REAL в Java - это
float.
DOUBLE
представляет число с плавающей точкой двйоной точности с 15-разрядной мантиссой.
Соответствующий ему SQL-тип, DOUBLE PRECISION, определен в
SQL-92 и широко используется во всех основных СУБД.
DOUBLE отображается на тип Java double.
FLOAT эквивалентем типу
DOUBLE. Он введен для совместимости с ранними версиями API.
FLOAT представляет из себя число с плавающей точкой двойной
точности с 15-разрядной мантиссой.
Рекомендуемое отображение типа FLOAT - это
тип Java double. Вследствие потенциальной угрозы путаницы между
числами двойной точности в SQL FLOAT и числами одинарной точности в
Java float лучше использовать тип JDBC DOUBLE.
DECIMAL и NUMERIC очень похожи. Оба
представляют собой десятичные числа с фиксированной точкой.
Соответствующие типы данных SQL, DECIMAL и NUMERIC,
определены в стандарте SQL-92 и очень распространены. Эти типы принимают два
параметра - точность (precision) и масштаб (scale). Точность - это общее
количество десятичных цифр, а масштаб - число цифр после точки. Масштаб должен
быть всегда не больше точности. Например, "12.345" имеет точность 5 и масштаб 3,
а значение ".11" - точность 2 и такой же масштаб. JDBC требует, чтобы как
DECIMAL, так и NUMERIC поддерживали максимальное
значение точности и масштаба как минимум 15.
Единственное отличие DECIMAL отd NUMERIC в
спецификации SQL-92 - в том, что NUMERIC именно указанную точность,
в то время как для типов данных DECIMAL возможно увеличение
точности за пределы того значения, которое было задано при создании типа. Таким
образом, колонка, созданная как NUMERIC(12,4) всегда будет
представлена 12-ю цифрами, в то время как колонка, определенная как
DECIMAL(12,4), может хранить немного более точные значения.
Рекомендуемое отображение типов DECIMAL и NUMERIC -
это объект java.math.BigDecimal, который также представляет собой
числа с фиксированной точкой. Над типами java.math.BigDecimal можно
выполнять арифметические операции сложения, вычитания, умножения и деления как с
другими объектами java.math.BigDecimal, так и с целыми числами и
числами с плавающей запятой.
Метод, рекомендуемый для извлечения значений типа DECIMAL и
NUMERIC - это ResultSet.getBigDecimal. JDBC также
позволяет трактовать эти значения как обычные строки или массивы символов. Т.е.
программист может использовать метод getString для чтения
DECIMAL или NUMERIC.
DATE представляет дату, содержащую день, месяц и год.
Соответствующий SQL-тип DATE определен в SQL-92, но реализован не
во всех СУБД. Некоторые БД предлагают альтернативные типы SQL, поддерживающие
ту же семантику. TIME представляет собой время, состоящее из часов,
минут и секунд. Соответствующий тип в SQL, тоже TIME, определен в
SQL-92, но реализован только в нескольких СУБД. Как и с датой, некоторые БД
предлагают альтернативы типу TIME. TIMESTAMP представляет DATE плюс
TIME плюс поле наносекунды. Соответствующий тип в SQL,
TIMESTAMP, определен в SQL-92, но реализован не во всех СУБД.
java.util.Date не
соответствует ни одному из этих трех типов данных в точности (он включает
информацию и о дате, и о времени) определяет три подкласса класса
java.util.Date, соответствующих типам данных SQL:
java.sql.Date для информации о DATE. Поля часа,
минуты, секунды и миллисекунды базового класса java.util.Date
устанавливаются в 0. java.sql.Time для TIME. Поля года, месяца и дня
базового класса java.util.Date устанавливаются в 1970, январь и 1
соответственно. Это "нулевая" дата для Java. java.sql.Timestamp для TIMESTAMP. Этот класс
расширяет java.util.Date добавлением наносекундного поля.
java.util.Date, так как являются дочерними по отношению к нему.
Например, методы интернационализации принимают объект
java.util.Date в качестве аргумента, поэтому могут передаваться
объекты, являющиеся экземплярами классов JDBC для работы со временем.
Объекты Timestamp состоят из унаследованных
компонентов даты и времени, а также отдельной компоненты - наносекунды. Если
объект java.sql.Timestamp используется так, где ожидается
java.util.Date, то наносекундная составляющая теряется. Тем не
менее, поскольку объект java.util.Date хранится с точностью до
миллисекунды, эту степень точности можно сохранить и при конвертировании объекта
из java.sql.Timestamp в java.util.Date. Это делается
преобразованием наносекунд в миллисекунды (делением на 1000000) и прибавлением
результата к объекту java.util.Date object. При таком
преобразовании может быть потеряно до 999,999 наносекунд, но точность
полученного объекта java.util.Date будет до одной миллисекундды.
В этом фрагменте кода демонстрируется проеобразование объекта
java.sql.Timestamp в java.util.Date с точностью до
миллисекунды:
Timestamp t = new Timestamp(100, 0, 1, 15, 45, 29, 987245732);
java.util.Date d;
d = new java.util.Date(t.getTime() + (t.getNanos() / 1000000));
ResultSet, PreparedStatement и
CallableStatement. Далее рассматриваются три сценария.
ResultSet с результатами. Значение, возвращенное из БД и
сохраненное в колонке ResultSet, имеет определенный тип данных.
Вызов метода ResultSet.getXXX возвращает эти значения согласно
типам данных языка Java. Например, если колонка ResultSet содержит
значения FLOAT, то метод getDouble считывает это
значение как Java-тип double. Таблица в разделе 8.6.6
показывает, какие из методов getXXX могут использоваться для чтения
различных JDBC-типов данных. (Пользователь, который не знает тип данных колонки
ResultSet, может получить эту информацию с помощью методов объекта
ResultSet.getMetaData.ResultSetMetaData getColumnType
или getColumnTypeName). Следующий фрагмент кода демонстрирует
получение имен типов колонок:
String query = "select * from Table1";
ResultSet rs = stmt.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
String s = rsmd.getColumnTypeName(i);
System.out.println ("Column " + i + " is type " + s);
}
PreparedStatement.setXXX для
присвоения значений каждому входному параметру. Например,
PreparedStatement.setLong(1, 2345678) присвоит первому параметру
значение long 2345678. Перед отсылкой в БД драйвер преобразует
2345678 в JDBC-тип данных BIGINT. Какой именно из
JDBC-типов при этом используется, определяется стандартным отображением
Java-типов на JDBC-типы данных, которое показано в таблице раздела 8.6.2.
В этом сюжете первое, что необходимо сделать, это
присвоить значения параметрам INOUT с помощью методов
PreparedStatement.setXXX. К тому же, так как параметры также
использоваться и для вывода, программист должен зарегистрировать тип данных
каждого параметра. Это делается методом
CallableStatement.registerOutParameter, который принимает в виде
аргумента один из JDBC-типов, объявленных в классе Types.
Программист считывает результаты, возвращенные в объект ResultSet,
с помощью методов ResultSet.getXXX, а значения выходных параметров
- с помощью CallableStatement.getXXX. Таблица в разделе 8.6.6
показывает, какие из методов ResultSet.getXXX
использовать для считывания каких JDBC-типов.
Тип XXX в CallableStatement.getXXX
должен соответствовать JDBC-типу, зарегистрированному для данного параметра.
Например, если от БД ожидается значение REAL, то параметр должен
быть зарегистрирован как java.sql.Types.REAL. Для получения
значения типа REAL используется метод
CallableStatement.getFloat.
Следующий пример демонстрирует вызов хранимой процедуры с названием
getTestData с двумя INOUT параметрами. Сначала объект
Connection con создает объект
CallableStatement cstmt. Потом метод
setByte устанавливает первый параметр в 25 (типа
byte). Драйвер сконвертирует 25 в
TINYINT. Метод setBigDecimal устанавливает второй
параметр в значение 83.75. Драйвер сконвертирует его из
java.math.BigDecimal в значение JDBC NUMERIC. Далее
регистрируются параметры: первый - как TINYINT, второй -
DECIMAL. После выполнения cstmt значения считываются
из объекта ResultSet с помощью методов
ResultSet.getXXX. Метод getString получает значение
первой колонки в виде Java-объекта String, getInt
возвращает значение второй колонки в виде int.
Потом методы CallableStatement.getXXX извлекают выходные
значения параметров. Метод getByte возвращает TINYINT
в виде byte, а getBigDecimal возвращает
DECIMAL в виде java.math.BigDecimal.
CallableStatement cstmt = con.prepareCall(
"{call getTestData(?, ?)}");
cstmt.setByte(1, 25);
cstmt.setBigDecimal(2, 83.75);
// зарегистрировать первый параметр как JDBC TINYINT, а второй-
// как JDBC DECIMAL с двумя цифрами после запятой
cstmt.registerOutParameter(1, java.sql.Types.TINYINT);
cstmt.registerOutParameter(2, java.sql.Types.DECIMAL, 2);
ResultSet rs = cstmt.executeUpdate();
// извлечь и напечатать значения из набора данных
while(rs.next()) {
String name = rs.getString(1);
int score = rs.getInt(2);
int percentile = rs.getInt(3);
System.out.print("name = " + name + ", score = " + score + ", "
System.out.println("percentile = " + percentile);
// извлечь значения из выходных параметров
byte x = cstmt.getByte(1);
java.math.BigDecimal n = cstmt.getBigDecimal(2, 2);
"XXX" в методах
CallableStatement.getXXX и PreparedStatement.setXXX -
это тип данных Java.
Следующие три метода и одна константа упрощают доступ к таким данным, чьи типы неизвестны на этапе компиляции:
ResultSet.getObject PreparedStatement.setObject CallableStatement.getObject java.sql.Types.OTHER (используется в виде аргумента метода
CallableStatement.registerOutParameter) ResultSet, оно может использовать метод
ResultSet.getObject.
Методы ResultSet.getObject и
CallableStatement.getObject возвращают значения в виде объекта Java
Object. Так как Object является базовым классом для
всех объектов Java, то экземпляр любого Java-класса может быть получен как
экземпляр типа Object. Исключением являются встроенные примитивные
типы данных, не являющиеся объектами: boolean, char,
byte, short, int, long,
float и double. Эти типы данных не могут быть считаны
методом getObject. Тем не менее каждый примитивный класс имеет свою
объектную "оболочку", то есть представление в виде объекта.
| JDBC type | Java type |
|---|---|
CHAR
| String
|
VARCHAR
| String
|
LONGVARCHAR
| String
|
NUMERIC
| java.math.BigDecimal
|
DECIMAL
| java.math.BigDecimal
|
BIT
| boolean
|
TINYINT
| byte
|
SMALLINT
| short
|
INTEGER
| int
|
BIGINT
| long
|
REAL
| float
|
FLOAT
| double
|
DOUBLE
| double
|
BINARY
| byte[]
|
VARBINARY
| byte[]
|
LONGVARBINARY
| byte[]
|
DATE
| java.sql.Date
|
TIME
| java.sql.Time
|
TIMESTAMP
| java.sql.Timestamp |
| Java-тип | JDBC-тип |
|---|---|
String
| VARCHAR or LONGVARCHAR
|
java.math.BigDecimal
| NUMERIC
|
boolean
| BIT
|
byte
| TINYINT
|
short
| SMALLINT
|
int
| INTEGER
|
long
| BIGINT
|
float
| REAL
|
double
| DOUBLE
|
byte[]
| VARBINARY or LONGVARBINARY
|
java.sql.Date
| DATE
|
java.sql.Time
| TIME
|
java.sql.Timestamp
| TIMESTAMP |
Отображение String обычно осуществляется в
VARCHAR, но может и в LONGVARCHAR, если длина строки
превысит максимально допустимый предел для VARVHAR. Это же касается и
отображения byte[] на VARBINARY и LONGVARBINARY.
boolean and
int) не являются объектами, то отображение в случае использования
методов getObject/setObject несколько отличается:
| JDBC Type | Java Object Type |
|---|---|
CHAR
| String
|
VARCHAR
| String
|
LONGVARCHAR
| String
|
NUMERIC
| java.math.BigDecimal
|
DECIMAL
| java.math.BigDecimal
|
BIT
| Boolean
|
TINYINT
| Integer
|
SMALLINT
| Integer
|
INTEGER
| Integer
|
BIGINT
| Long
|
REAL
| Float
|
FLOAT
| Double
|
DOUBLE
| Double
|
BINARY
| byte[]
|
VARBINARY
| byte[]
|
LONGVARBINARY
| byte[]
|
DATE
| java.sql.Date
|
TIME
| java.sql.Time
|
TIMESTAMP
| java.sql.Timestamp |
| Java Object Type | JDBC Type |
|---|---|
String
| VARCHAR or LONGVARCHAR
|
java.math.BigDecimal
| NUMERIC
|
Boolean
| BIT
|
Integer
| INTEGER
|
Long
| BIGINT
|
Float
| REAL
|
Double
| DOUBLE
|
byte[]
| VARBINARY or LONGVARBINARY
|
java.sql.Date
| DATE
|
java.sql.Time
| TIME
|
java.sql.Timestamp
| TIMESTAMP |
Отображение String обычно осуществляется в
VARCHAR, но может и в LONGVARCHAR, если длина строки
превысит максимально допустимый предел для VARVHAR. Это же касается и
отображения byte[] на VARBINARY и LONGVARBINARY.
setObject преобразует объектные типы Java в
JDBC-типы.
| T I N Y I N T | S M A L L I N T | I N T E G E R | B I G I N T | R E A L | F L O A T | D O U B L E | D E C I M A L | N U M E R I C | B I T | C H A R | V A R C H A R | L O N G V A R C H A R | B I N A R Y | V A R B I N A R Y | L O N G V A R B I N A R Y | D A T E | T I M E | T I M E S T A M P | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| String | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x |
| java.math.BigDecimal | x | x | x | x | x | x | x | x | x | x | x | x | x | ||||||
| Boolean | x | x | x | x | x | x | x | x | x | x | x | x | x | ||||||
| Integer | x | x | x | x | x | x | x | x | x | x | x | x | x | ||||||
| Long | x | x | x | x | x | x | x | x | x | x | x | x | x | ||||||
| Float | x | x | x | x | x | x | x | x | x | x | x | x | x | ||||||
| Double | x | x | x | x | x | x | x | x | x | x | x | x | x | ||||||
| byte[] | x | x | x | ||||||||||||||||
| java.sql.Date | x | x | x | x | x | ||||||||||||||
| java.sql.Time | x | x | x | x | |||||||||||||||
| java.sql.Time- stamp | x | x | x | x | x | x |
| T I N Y I N T | S M A L L I N T | I N T E G E R | B I G I N T | R E A L | F L O A T | D O U B L E | D E C I M A L | N U M E R I C | B I T | C H A R | V A R C H A R | L O N G V A R C H A R | B I N A R Y | V A R B I N A R Y | L O N G V A R B I N A R Y | D A T E | T I M E | T I M E S T A M P | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| getByte | X | x | x | x | x | x | x | x | x | x | x | x | x | ||||||
| getShort | x | X | x | x | x | x | x | x | x | x | x | x | x | ||||||
| getInt | x | x | X | x | x | x | x | x | x | x | x | x | x | ||||||
| getLong | x | x | x | X | x | x | x | x | x | x | x | x | x | ||||||
| getFloat | x | x | x | x | X | x | x | x | x | x | x | x | x | ||||||
| getDouble | x | x | x | x | x | X | X | x | x | x | x | x | x | ||||||
| getBigDecimal | x | x | x | x | x | x | x | X | X | x | x | x | x | ||||||
| getBoolean | x | x | x | x | x | x | x | x | x | X | x | x | x | ||||||
| getString | x | x | x | x | x | x | x | x | x | x | X | X | x | x | x | x | x | x | x |
| getBytes | X | X | x | ||||||||||||||||
| getDate | x | x | x | X | x | ||||||||||||||
| getTime | x | x | x | X | x | ||||||||||||||
| getTimestamp | x | x | x | x | X | ||||||||||||||
| getAsciiStream | x | x | X | x | x | x | |||||||||||||
| getUnicodeStream | x | x | X | x | x | x | |||||||||||||
| getBinaryStream | x | x | X | ||||||||||||||||
| getObject | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x |