Conexão Oracle - O que é mais indicado?

Galera, gostaria da opinião/sugestão de vocês.

Tenho uma aplicação que faz acesso a um banco oracle. Faço a conexão com a base de dados da seguinte forma:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");    
conJDBC = DriverManager.getConnection(strUrl,strUser,strPwd);
stmt = conJDBC.createStatement(); 

Está funcionando, porém estou com uma certa dúvida se esta é a maneira mais indicada de efetuar a conexão. Não gostaria de mantê-la aberta, porém o tempo gasto quando executo a conexão é um pouco grande, o que causa lentidão no sistema se após cada consulta eu fechar a conexão.

Esse sistema só faz consultas na base, não realiza nenhuma inserção ou atualização.

O tempo levado para realizar a conexão é grande mesmo? Aqui está levando uns 7 segundos. Tem relação com a forma que estou fazendo?
Existem outras alternativas?

Obrigado!

Bem, esse é a meneira normal de criar conexões com JDBC.

Você está dizendo que esta parte:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conJDBC = DriverManager.getConnection(strUrl,strUser,strPwd);
Demora 7 segundos para ser executada?

Exato Lipe.
Como não tenho experiencia com desenvolvimento em Java, queria saber se esse tempo é normal (normal não pode ser! rs…), pois fiquei com dúvida se era alguma falha naquilo que eu estava fazendo. Em uma situação normal, isso não ocorre não é mesmo?

Outro ponto é esse de manter ou não a conexão aberta. Eu estava enfrentando problemas pois tinha que carregar muitas imagens na tela, e pelo que li em um tópico aqui do proprio GUJ, seria interessante fechar todos os objetos que utilizo para acesso a banco. O problema é que com essa lentidão toda vai complicar um pouco para eu fazer isso.

7 segundos pode ser normal sim … se o seu banco está num outro computador e você está com conexão discada :smiley:
Verifique se o driver que está usando é o mais atual e/ou melhor disponível no mercado e verifique se não há nenhuma outra barreira extra entre sua aplicação e o banco.

Sobre fechar a conexão, sim, é uma boa prática liberar recursos assim que possível. Portanto otimize o seu tempo com ela aberta: faça o máximo que puder, no menor tempo possível e então feche a danada.

Ai que tá o problema, o banco está em outra máquina, mas ainda estou em uma rede local. Quando colocar em ambiebte de produção com conexão discada não quero nem ver.

Bom, vou verificar o driver, para ver se tem alguma versão mais atual, de alguma forma, tenho que melhorar isso.

Obrigado pela ajuda!

Certeza que vc quer usar JDBC-ODBC e nao o driver certo do Oracle, o thindriver? :wink:

Olá

[color=red]Não[/color]

  1. Use o driver classes12 que se pode baixar do próprio site da Oracle

  2. Não use Class.forName e DriverManager. use DataSource, procure informações sobre qual a diferença entre usar DriverManager e DataSource

[]s
Luca

Na verdade cv, o driver que tinha encontrado era esse. Mas pelo que deu a entender, o thindriver deve possuir vantagens. Sinceramente nunca utilizei :oops: , mas como você levantou essa alternativa vou tentar utilizá-lo e ver se consigo um melhor resultado.

Assim que fizer testes comento aqui os resultados.

Obrigado!

[quote=Luca]1. Use o driver classes12 que se pode baixar do próprio site da Oracle
[/quote]
Ou o driver ojdbc14 que também pode ser baixado no próprio site da Oracle.

[quote=Lruiz]Está funcionando, porém estou com uma certa dúvida se esta é a maneira mais indicada de efetuar a conexão. Não gostaria de mantê-la aberta, porém o tempo gasto quando executo a conexão é um pouco grande, o que causa lentidão no sistema se após cada consulta eu fechar a conexão.
[/quote]

Quanto a realização de conexões, fechar ou manter aberta: recomendo que tu uses um pool de conexões para resolver esse problema.

Filipi P. Silveira

E ai pessoal, fiquei um tempinho fora mas to de volta!

Entao, eu fiz testes com a conexão via DataSource me baseando na documentação do próprio Tomcat url [/url], baixei o driver no site da Oracle http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/winsoft.html , e após configurar segiundo a documentação só fiz um teste bem básico pra ver primeiro se estava funcionando:

[code]
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup(“java:/comp/env/idxce_dba”);
conJDBC = ds.getConnection(); //public static Connection conJDBC;

Mas na linha DataSource ds = (DataSource)ctx… ele retorna e seguinte Exception:
“Name idxce_dba is not bound in this context”

procurei por esta mensagem de erro para ver outras pessoas que tinham passado por este problema mas os testes sugeridos não tiveram resultado.

Alguém faz idéia do que possa ser ou tem alguma sugestão?

Obrigado!

Ah… só pra antecipar, já aproveito pra questionar uma coisa que me deixou em dúvida e que pode estar errada.

Quando tenho:

DataSource ds = (DataSource)ctx.lookup("java:/comp/env/idxce_dba");

Dentro do ctx.lookup eu passo o nome que coloquei na tag <Resource name> do meu arquivo server.xml? É isso?

lRuiz,

com relação ao ctx.lookup está correto, é assim mesmo.

Agora em relação ao erro : Name idxce_dba is not bound in this context,

o que está acontecendo é que vc tentou definir o Resource dentro do Server.XML e na verdade deve ser criado um contexto específico para sua aplicação dentro do diretório CONF/CATALINA/LOCALHOST.

Vc pode utilizar o código que está na documentação do próprio TomCat mas não colocá-lo no server.xml, pois senão esse resource fica fora de contexto e daí o erro.

Eu sugiro que vc configure o TomCat diretamente na tela do TomCat Administration, pois ele já faz as alterações nos arquivos xml corretamente. Assim vc iria criar o Resource na árvore SERVER/HOST/CONTEXT (sendo que vc deve criar um novo JNDI Data Source dentro do contexto da sua aplicação). Entendeu ou não entendeu ?

Abraços e boa sorte !