Mesmo código; resultados diferentes [RESOLVIDO]

12 respostas
S

ps: Se acontecer a mesma coisa com vc mude o odbc de “user” para “system” em painel de controle / ferramentas administrativas / fonte de dados odbc

Salve! Eu tenho um projeto de servlet feito no netbeans que funciona beleza. To tentando fazer rodar no Apache Tomcat 6.0, pra isso peguei o war do projeto e joguei na webapps. Ele chama o servlet, até ai tudo bem, mas sempre que eu uso banco de dados aparece uma tela branca. Fui ver no log de saídas, e aparece a seguinte mensagem : “Problemas na conexao com a fonte de dados”.
O trecho que gera esse código, é da exception:

url = "jdbc:odbc:BD"; // BD é o nome do meu banco de dados
 if(!usu.equals(null) && !senhas.equals(null)){  // verifica se user e señha não sao nulos
           try       {
       Class.forName ( "sun.jdbc.odbc.JdbcOdbcDriver" );
       con = DriverManager.getConnection(url,"","");
       con2 = DriverManager.getConnection(url,"","");
       stmt = con.createStatement();
       stmt2 = con2.createStatement();
    //cria conexâo
       }
    catch(ClassNotFoundException ex)
       {
       System.out.println("Driver JDBC-ODBC não encontrado!");
       return; //se não cair aqui então encontrou o driver
       }
    catch(SQLException ex)
       {
       System.out.println("Problemas na conexao com a fonte de dados");
       return; //cai aqui
       }
 }

12 Respostas

jurunaloco

posta a exception pra gente ver

T

Nem vi o resto do seu código, mas para checar se determinado valor é null, você não pode usar equals, e sim == ou “!=”. Ou seja:

if(usu != null && senhas != null){
S

então, cai naquela " SQLException ex ". thingol, fiz o que me sugeriu mas acontece a mesma coisa (eu não sabia que não podia usar equals pra null oO). Será que não é alguma configuração do xml ou no tomcat? eu não manjo nada de xml, pode ser isso

T

Você tem de imprimir a exceção, conforme o pessoal lhe pediu. Faça assim, e poste o erro que deu.

catch(SQLException ex)  
        {  
          ex.printStackTrace(); // isto imprime o erro com o stack trace completo, em vez de imprimir a sua mensagem 
        return; //cai aqui  
        }
S
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Nome da fonte de dados não encontrado e nenhum driver padrão especificado
	at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
	at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
	at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source)
	at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
	at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at servlets.Logar.doGet(Logar.java:84)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)

estranho… está definido lá no odbc. Precisa estar em algum diretorio do tomcat?

T

Que eu saiba não, mas como o MS Access não é um bom banco de dados para ser acessado por aplicações multi-usuário, eu recomendaria você usar um outro banco qualquer.

S

certo, vou ter que me apressar pra migrar o banco (e os códigos). Mas to achando estranho, se o problema é no banco de dados não deveria dar erro pelo servidor que o NetBeans chama tb?

T

É realmente estranho. Mas você definiu o “data source” BD como “System”, “User” ou “File” DSN? Se for “System” deveria funcionar; se for User ou File, com certeza não funciona.

S

desculpe mas não intendi sua pergunta. Procurei por esses valores que vc mencionou no meu código mas não defini nada disso. No odbc ( fonte de dados), escolhi fonte de dados do usuário. ( ah sim, aqui tem arquivo e systema que vc mencionou). Vou tentar com system então

S

Funcionou, obrigado!

Era isso mesmo, vou marcar como resolvido ;))

T

Puxa vida - se vai mexer com Access pelo menos saiba a configuração do ODBC…

Estou zoando um pouco. Vou explicar qual é a diferença entre User, System e File DSN.

Quando você solicita uma conexão a um banco usando um driver ODBC (não importa se é via Java, VB, Delphi ou .NET), o Windows deve descobrir como efetuar a conexão de uma das seguintes maneiras:

  • Ele deve descobrir isso porque você cadastrou o data source usando aquele ícone do Control Panel e marcou como “System”. Nesse caso, os parâmetros de conexão estão guardados no Registry (HKEY_LOCAL_MACHINE) e disponíveis para qualquer usuário daquela máquina, incluindo os serviços (que usam o usuário especial “LocalSystem” ou “Network”)
  • Se for “User”, então os parâmetros estão no Registry, mas só são acessíveis para um determinado usuário (estão em HKEY_CURRENT_USER). Um outro usuário, ou então qualquer serviço, provavelmente não irá conseguir acessar.
  • Se for “File”, então os parâmetros ficam em um arquivinho que você deve acessar de sua aplicação.
S

Obrigado pelas dicas. É, foi mal, é que sou bem inexperiente. Esse é meu primeiro emprego em programação ( estágio), e é em asp.net. O que eu sei de java fui aprendendo aqui e em um livro da editora érica. Então como system eu posso acessar o serviço de outras máquinas, certo?

Criado 27 de outubro de 2008
Ultima resposta 27 de out. de 2008
Respostas 12
Participantes 3