Этот механизм состоит из методов 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 |