Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / работа с ResultSetMetaData в Java / 4 сообщений из 4, страница 1 из 1
05.02.2007, 20:05:46
    #34307636
Sheff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с ResultSetMetaData в Java
Столкнулся с такой проблемкой...
Плотно работаю в Java с ResultSetMetaData объектом, это тот который вытаскивается из ResultSet.
Так вот в этом объекте есть метод getColumnType(i) который для заданного столбца возвращает его тип. Например для Varchar2 это будет 12, а для всех числовых типов, будь то Float, Number, Number(x), Number(x,x), Integer возвращается тип равный 2. У меня стояла задача различать эти числовые типы более детально...на "Целый", "С плавающей точкой", "С фиксированной точкой".
C помощью методов объекта ResultSetMetaData, таких как getPrecision(i) и getScale(i) удалось этого добиться (см. след. код)

...
if ((rsmd.getPrecision(i)==0)&&(rsmd.getScale(i)!=0)){
types.put(new Integer(i), new Integer(INTEGER));
}
if ((rsmd.getPrecision(i)!=0)&&(rsmd.getScale(i)!=0)){
types.put(new Integer(i), new Integer(NUMBER));
}
if (((rsmd.getPrecision(i)<0)&&(rsmd.getScale(i)!=0))||((rsmd.getPrecision(i)==0)&&(rsmd.getScale(i)==0))){
types.put(new Integer(i), new Integer(FLOAT));
}
...

И действительно эта схема работала если вытаскивать данные только из одной таблички. Но как только начинаются запросы на основе нескольких таблиц или с использованием функции count, вся эта схема позволяющая разделить типы, перестает работать. Все числовые поля определяются как "Float", т.е. у них у всех Precision = 0 и Scale = 0.
Пробовал cast, например
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create table test (
amount number ( 10 ,  5 )
)
insert into test (amount) values ( 12345 . 12345 )

select cast (amount as number ( 10 ,  4 )) as amount from test
возвращает действительно  12345 . 1234 , но getScale( 1 ), getPrecision( 1 ) дают  0 

Кто-нибудь знает почему и как с этим бороться?
PS:используется thin driver для Oracle.
Помогите плиз, совсем запутался с этими типами :(
...
Рейтинг: 0 / 0
05.02.2007, 20:19:06
    #34307653
z
z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с ResultSetMetaData в Java
SheffСтолкнулся с такой проблемкой...
Плотно работаю в Java с ResultSetMetaData объектом, это тот который вытаскивается из ResultSet.
Так вот в этом объекте есть метод getColumnType(i) который для заданного столбца возвращает его тип. Например для Varchar2 это будет 12, а для всех числовых типов, будь то Float, Number, Number(x), Number(x,x), Integer возвращается тип равный 2. У меня стояла задача различать эти числовые типы более детально...на "Целый", "С плавающей точкой", "С фиксированной точкой".
C помощью методов объекта ResultSetMetaData, таких как getPrecision(i) и getScale(i) удалось этого добиться (см. след. код)

...
if ((rsmd.getPrecision(i)==0)&&(rsmd.getScale(i)!=0)){
types.put(new Integer(i), new Integer(INTEGER));
}
if ((rsmd.getPrecision(i)!=0)&&(rsmd.getScale(i)!=0)){
types.put(new Integer(i), new Integer(NUMBER));
}
if (((rsmd.getPrecision(i)<0)&&(rsmd.getScale(i)!=0))||((rsmd.getPrecision(i)==0)&&(rsmd.getScale(i)==0))){
types.put(new Integer(i), new Integer(FLOAT));
}
...

И действительно эта схема работала если вытаскивать данные только из одной таблички. Но как только начинаются запросы на основе нескольких таблиц или с использованием функции count, вся эта схема позволяющая разделить типы, перестает работать. Все числовые поля определяются как "Float", т.е. у них у всех Precision = 0 и Scale = 0.
Пробовал cast, например
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create table test (
amount number ( 10 ,  5 )
)
insert into test (amount) values ( 12345 . 12345 )

select cast (amount as number ( 10 ,  4 )) as amount from test
возвращает действительно  12345 . 1234 , но getScale( 1 ), getPrecision( 1 ) дают  0 

Кто-нибудь знает почему и как с этим бороться?
PS:используется thin driver для Oracle.
Помогите плиз, совсем запутался с этими типами :(

я удивляюсь, как данная схема вообще работает (не твоя, а Oracle-maded)
Если посмотришь исходный код реализации, то очень сильно удивишься (поэтому я юзаю dbms_sql)
...
Рейтинг: 0 / 0
05.02.2007, 21:26:32
    #34307745
\\
\\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с ResultSetMetaData в Java
zя удивляюсь, как данная схема вообще работает (не твоя, а Oracle-maded)
Если посмотришь исходный код реализации, то очень сильно удивишься (поэтому я юзаю dbms_sql)
И сидишь с возможностями 7-го Оракла?
...
Рейтинг: 0 / 0
05.02.2007, 22:19:01
    #34307815
raidan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с ResultSetMetaData в Java
\\ zя удивляюсь, как данная схема вообще работает (не твоя, а Oracle-maded)
Если посмотришь исходный код реализации, то очень сильно удивишься (поэтому я юзаю dbms_sql)
И сидишь с возможностями 7-го Оракла?
Приведенный автором темы код откровением не является.
Я лично с трудом могу представить — когда и зачем может потребоваться такой подход.
Тем не менее — к чему вы упомянули Oracle 7-й версии?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / работа с ResultSetMetaData в Java / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]