Precisão Oracle no Java

19 respostas
johnnylcon

Boa Tarde Galera,

Estou com seguinte problema, tenho uma view que faz/;
CAST( (SELECT COUNT(*) AS COUNT FROM "tabela" )  AS NUMBER(19,0)) AS "nome do campo",
Então do java eu executo e pego o metada, porém no metadata a precisão vem como "0".

 Minha pergunta é, o Java não consegue pegar a precisão de um cast?? Pois no meu caso ele entende que a coluna é um number somente, devido ao count.

 Valew...

19 Respostas

johnnylcon

Alguém ajuda ai… por favor

C

Qual a versão do driver JDBC que vc está usando?
É a última fornecida pela Oracle?
Pergunto isso pq na última versão, para o oracle 11g, foram corrigidos alguns bugs importantes.

johnnylcon

estou usando o “ojdbc14.jar”.

J

no oracle, precisão é casas após a vírgula… como você tá dando cast para NUMBER(19,0), obviamente… a precisão é 0… experimenta mudar para um número diferente tipo NUMBER(19,2)…

[]'s

johnnylcon

Se eu fizer o seguinte

metaData.getScale() -> Pega o valor a direita da virgula.

metaData.getPrecision() -> Pega o valor a esquerda da virgula.

Isso eu testei e funciona. Mas somene quanto eu pego uma coluna de uma tabela que já esta no padrão number(19,0) por exemplo.

Agora se esse padrão vier de cast, como é o meu caso, ele não pega a precissão corretamente.

B

http://java.sun.com/javase/6/docs/api/java/sql/ResultSetMetaData.html#getScale(int)

getScale

int getScale(int column)
throws SQLException

Gets the designated column's number of digits to right of the decimal point. 0 is returned for data types where the scale is not applicable. </blockquote>
johnnylcon

Bom Dia Galera,

Com relação ao getScale eu intendi como funciona, eu preciso de usar o getPrecision, mas ele não esta pegando a precisão do eu faço um cast, pega somente quando esse tipo é o tipo da coluna na tabela.

 Att.
B

Provavelmente é por que os metadados só se referem aos tipos e propriedades declarados das colunas das tabelas, não os tipos que elas adquirem em runtime, como em casts.

johnnylcon

Então provavelmente eu não vou conseguir pegar a precisão de tipo vindo de um cast no Oracle?

Não há nenhuma forma de eu conseguir essa precisão?

B

Eu acharia melhor você se perguntar se realmente precisa desses dados, ou explicar o problema maior para podermos ter uma noção do que quer fazer, e podermos te ajudar.

johnnylcon

Acontece o seguinte, eu tenhu um projeto que utiliza o jasper reports para criar relatório.

Porém esse projeto é bem genérico e eu passo para ele um xml dizendo qual tabela ou view do banco e colunas ele irá utilizar para gerar os relatórios.

E nesse xml eu também digo qual o tipo (String, Integer, Boolean) da coluna.

E além disso preciso que esse projeto rode com as bases, Oracle, SqlServer e Postgre.

Quando eu uso a funçao COUNT no Oracle, ele retorna um NUMBER. Integer no Java.

Quando eu uso a funçao COUNT no Postgre, ele retorna um bigint. Long no Java.

Quando eu uso a funçao COUNT no SqlServer, ele retorna um int. Integer no Java.

Como no postgre ele retorna um long eu estou tentando fazer um cast number(19,0) no oracle, então no java eu pegaria a precisão de number “19” e então sei que posso trabalhar como Long.

johnnylcon

Algume Ajuda …

B

Não era mais fácil tratar tudo do lado do Java como long ou int? Vai ser bem difícil alguem fazer um count que retorne mais que 2 bilhões de registros.

johnnylcon

ai meu irmão tá começando com piadinha… sai fora…

como ja falei num post acima, eu tenho um projeto genérico e preciso que ele funcione para 3 bancos de dados diferente, por isso eu estou fazendo o cast, para que independente do banco, sempre venha o mesmo tipo.

volto a perguntar, Se eu fizer um cast para number(19,0), no java eu não vou consegiur pegar essa precisão de 19 ???

johnnylcon

Se eu fizer um cast para number(19,0), no java eu não vou consegiur pegar essa precisão de 19 ???

E

A resposta é: se o driver do Oracle que você estiver usando não lhe retornar essa informação, sinto muito. O que você pode fazer:

a) Ver se uma versão mais nova do driver (não a ojdbc14, que é meio antiga) dá tal tipo de suporte;
ou
b) Ler essa informação de um arquivo de configuração que você editaria manualmente, já que o driver não vai lhe dar essa informação mesmo.

Felagund

entanglement:
A resposta é: se o driver do Oracle que você estiver usando não lhe retornar essa informação, sinto muito. O que você pode fazer:

a) Ver se uma versão mais nova do driver (não a ojdbc14, que é meio antiga) dá tal tipo de suporte;
ou
b) Ler essa informação de um arquivo de configuração que você editaria manualmente, já que o driver não vai lhe dar essa informação mesmo.

a ojdbc14 é a mais atual :).

Já pensou em usar JPA, ou Hibernate pra abstração.

johnnylcon

Valew galera … vou tentar alguma dessas alternativas.

E

Hum…

http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc_112010.html

Ele lista um “ojdbc5.jar” e um “ojdbc6.jar”, que implementam mais coisas.

Criado 24 de setembro de 2009
Ultima resposta 28 de set. de 2009
Respostas 19
Participantes 6