Erro na conexão com o banco! [RESOLVIDO]

10 respostas
arthurthiago

Fala galera do bem!!

Tow com um problema creio que na hora de conectar no banco de dados…

para facilicar vou postar as imagens:

Esta é a tela de Login e ao fundo o código que é executado quando é clicado o botão “Conectar”

se quiserem ver todo o erro está a seguir:

java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access]Campo COUNT incorreto at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958) at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115) at sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3150) at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(JdbcOdbcPreparedStatement.java:214) at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeQuery(JdbcOdbcPreparedStatement.java:89) at br.com.caep.imp.Usuario.verificaUser(Usuario.java:43) at br.com.caep.gui.Login.btnConectMouseClicked(Login.java:170) at br.com.caep.gui.Login.access$000(Login.java:16) at br.com.caep.gui.Login$1.mouseClicked(Login.java:94) at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:212) at java.awt.Component.processMouseEvent(Component.java:5491) at javax.swing.JComponent.processMouseEvent(JComponent.java:3126) at java.awt.Component.processEvent(Component.java:5253) at java.awt.Container.processEvent(Container.java:1966) at java.awt.Component.dispatchEventImpl(Component.java:3955) at java.awt.Container.dispatchEventImpl(Container.java:2024) at java.awt.Component.dispatchEvent(Component.java:3803) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3901) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822) at java.awt.Container.dispatchEventImpl(Container.java:2010) at java.awt.Window.dispatchEventImpl(Window.java:1778) at java.awt.Component.dispatchEvent(Component.java:3803) at java.awt.EventQueue.dispatchEvent(EventQueue.java:463) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149) at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

e se alguém achar necessário aí vai meu método verificaUser() da classe Usuário:

/** Verifica se o usuário informado está no banco e se a senha informada é a correta. */ public boolean verificaUser() throws SQLException, IOException{ System.out.println("Carregando o Driver JDBC/ODBC..."); try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); System.out.println("Conectando-se ao banco de dados CAEP..."); con = DriverManager.getConnection("jdbc:odbc:logincaep","",""); } catch (Exception e) { e.printStackTrace(); return false; } DatabaseMetaData dmd = con.getMetaData(); System.out.println("Conectado a: "+ dmd.getURL()); System.out.println("Driver: "+ dmd.getDriverName()); System.out.println("Versão: "+ dmd.getDriverVersion()); String sql = "SELECT * FROM " + tabGrupo + " WHERE Nome = ?"; PreparedStatement stmt = con.prepareStatement(sql); ResultSet rs = stmt.executeQuery(); stmt.setString(1, nome); boolean verifica = false; if (rs.next()) { //Encontrou o usuário //Verifica se a senha bate if (senha.equals(rs.getString("Senha"))) verifica = true; else verifica = false; } else verifica = false; stmt.close(); rs.close(); return verifica; }

Bom, antes meu banco de dados estava funcionando corretamente, por isso acho que não é algo com a criação do banco mas sim algum comando errado ou que esteja faltando… se alguem tiver uma luz ai eu fico grato!! heehhe

vlw!

10 Respostas

guilherme.chapiewski
  1. Por acaso você tem um campo COUNT nessa tabela? Se tiver, renomeie para qualquer coisa pois esta é uma palavra reservada.

  2. Tente usar um driver melhor, a recomendação para SQL Server é o jTDS: http://jtds.sourceforge.net. Muitas pessoas reclamam de conexão de aplicações Java->SQL Server e eu já ví muitos problemas serem resolvidos simplesmente trocando-se o driver.

arthurthiago

Vou tentar instalar o MySql e dai eu vejo no que da e mando outra mensagem!!

vlw!

Giulliano

Cara o seu problema não é o driver…é a sua lógica…

PreparedStatement stmt = con.prepareStatement(sql);

ResultSet rs = stmt.executeQuery();

stmt.setString(1, nome);

Quando o certo seria:

PreparedStatement stmt = con.prepareStatement(sql);

stmt.setString(1, nome);

ResultSet rs = stmt.executeQuery();

Se vc não setar o nome antes de excutar a instrução…o campo COUNT retorna vazio…lembrando que COUNT é uma função dos BDS para retornar quantidade de registros existentes…

[]'s

arthurthiago

Giulliano


Quando o certo seria:

PreparedStatement stmt = con.prepareStatement(sql);

stmt.setString(1, nome);

ResultSet rs = stmt.executeQuery(); </blockquote>

Então eu tentei colocar do jeito que você me sugeriu e continuou ocorrendo o mesmo erro:

java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access]Campo COUNT incorreto at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958) at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115) at sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3150) at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(JdbcOdbcPreparedStatement.java:214) at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeQuery(JdbcOdbcPreparedStatement.java:89) at br.com.caep.imp.Usuario.verificaUser(Usuario.java:42) at br.com.caep.gui.Login.btnConectMouseClicked(Login.java:170) at br.com.caep.gui.Login.access$000(Login.java:16) at br.com.caep.gui.Login$1.mouseClicked(Login.java:94) at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:212) at java.awt.Component.processMouseEvent(Component.java:5491) at javax.swing.JComponent.processMouseEvent(JComponent.java:3126) at java.awt.Component.processEvent(Component.java:5253) at java.awt.Container.processEvent(Container.java:1966) at java.awt.Component.dispatchEventImpl(Component.java:3955) at java.awt.Container.dispatchEventImpl(Container.java:2024) at java.awt.Component.dispatchEvent(Component.java:3803) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3901) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822) at java.awt.Container.dispatchEventImpl(Container.java:2010) at java.awt.Window.dispatchEventImpl(Window.java:1778) at java.awt.Component.dispatchEvent(Component.java:3803) at java.awt.EventQueue.dispatchEvent(EventQueue.java:463) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149) at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

Será que não pode ser outra coisa?

os parâmetros que eu devo passar no método setString(integer,String) são respectivamente o número da coluna e a String que estou procurando naquela coluna?

postando o novo código:

public boolean verificaUser() throws SQLException, IOException{ System.out.println("Carregando o Driver JDBC-ODBC..."); try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); System.out.println("Conectando-se ao banco de dados CAEP..."); con = DriverManager.getConnection("jdbc:mysql:logincaep","",""); //con = DriverManager.getConnection(jdbc:mysql:logincaep,"",""); } catch (Exception e) { e.printStackTrace(); } DatabaseMetaData dmd = con.getMetaData(); System.out.println("Conectado a: "+ dmd.getURL()); System.out.println("Driver: "+ dmd.getDriverName()); System.out.println("Versão: "+ dmd.getDriverVersion()); String sql = "SELECT * FROM " + tabGrupo + " WHERE Nome = ?"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setString(1,login); ResultSet rs = stmt.executeQuery(); //Irá procurar se o usuário está no banco e se a senha bate if (rs.next()) { if (senha.equals(rs.getString("Senha"))) stmt.close(); rs.close(); return true; } stmt.close(); rs.close(); return false; }

vlw!

arthurthiago

e outra coisa…

Quando eu debuguei deu esses dois erros:

<blockquote>java.sql.SQLException: No suitable driver

at java.sql.DriverManager.getConnection(DriverManager.java:545)

at java.sql.DriverManager.getConnection(DriverManager.java:171)

at br.com.caep.imp.Usuario.verificaUser(Usuario.java:32)

at br.com.caep.gui.Login.btnConectMouseClicked(Login.java:170)

at br.com.caep.gui.Login.access$000(Login.java:16)

at br.com.caep.gui.Login$1.mouseClicked(Login.java:94)

at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:212)

at java.awt.Component.processMouseEvent(Component.java:5491)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)

at java.awt.Component.processEvent(Component.java:5253)

at java.awt.Container.processEvent(Container.java:1966)

at java.awt.Component.dispatchEventImpl(Component.java:3955)

at java.awt.Container.dispatchEventImpl(Container.java:2024)

at java.awt.Component.dispatchEvent(Component.java:3803)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3901)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)

at java.awt.Container.dispatchEventImpl(Container.java:2010)

at java.awt.Window.dispatchEventImpl(Window.java:1778)

at java.awt.Component.dispatchEvent(Component.java:3803)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
java.lang.NullPointerException

at br.com.caep.imp.Usuario.verificaUser(Usuario.java:37)

at br.com.caep.gui.Login.btnConectMouseClicked(Login.java:170)

at br.com.caep.gui.Login.access$000(Login.java:16)

at br.com.caep.gui.Login$1.mouseClicked(Login.java:94)

at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:212)

at java.awt.Component.processMouseEvent(Component.java:5491)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)

at java.awt.Component.processEvent(Component.java:5253)

at java.awt.Container.processEvent(Container.java:1966)

at java.awt.Component.dispatchEventImpl(Component.java:3955)

at java.awt.Container.dispatchEventImpl(Container.java:2024)

at java.awt.Component.dispatchEvent(Component.java:3803)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3901)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)

at java.awt.Container.dispatchEventImpl(Container.java:2010)

at java.awt.Window.dispatchEventImpl(Window.java:1778)

at java.awt.Component.dispatchEvent(Component.java:3803)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

</blockquote>
thiagopassosp

amigo vc ja importou os pacotes necessarios…

import java.sql.*;

arthurthiago

Cara.. eu importei sim.. Pra aproveitar vou postar toda a classe Usuario:

package br.com.caep.imp;

import java.sql.*;
import java.io.*;

/**
 *
 * @author Arthur
 */
public class Usuario {
    
    /** Cria uma nova instância da classe Usuario.
     * @param tnome Nome do usuário (login).
     * @param tsenha Senha que o usuario informou.
     * @param tgrupo Grupo ao qual o usuário pertence (Servidor, Professor ou Aluno).
     */
    public Usuario(String tlogin, String tsenha, String grupo) {
        login = tlogin;
        senha = tsenha;
        if ("Servidor".equals(grupo)) tabGrupo = "tab_servidor";
        else if ("Professor".equals(grupo)) tabGrupo = "tab_professor";
        else if ("Aluno".equals(grupo)) tabGrupo = "tab_aluno";        
    }
   
    /** Verifica se o usuário informado está no banco e se a senha informada é a correta.
     */
    public boolean verificaUser() throws SQLException, IOException{
        System.out.println("Carregando o Driver JDBC-ODBC...");
        try {    
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            System.out.println("Conectando-se ao banco de dados CAEP...");
            con = DriverManager.getConnection("jdbc:odbc:logincaep","","");
            //con = DriverManager.getConnection(jdbc:mysql:logincaep,"","");
        } catch (Exception e) {
            e.printStackTrace();            
        }        
        DatabaseMetaData dmd = con.getMetaData();
        System.out.println("Conectado a:   "+ dmd.getURL());
        System.out.println("Driver:        "+ dmd.getDriverName()); 
        System.out.println("Versão:        "+ dmd.getDriverVersion());
        String sql = "SELECT * FROM " + tabGrupo + " WHERE Nome = ?";
        PreparedStatement stmt = con.prepareStatement(sql);
        stmt.setString(1,login);
        ResultSet rs = stmt.executeQuery();
        //Irá procurar se o usuário está no banco e se a senha bate
        if (rs.next()) {            
            if (senha.equals(rs.getString("Senha")))
                stmt.close();
                rs.close();
                desconecta();
                return true;
        }        
        stmt.close();
        rs.close();
        desconecta();
        return false;
    }
    
    /** Fecha a conexão com o banco de dados  
    */        
    public void desconecta() {
        if (con != null) {           
            try {
                System.out.println("Desconectando-se do banco de dados...");
                con.close();
            } catch (Exception e) {}
        }
    }
    
    private String login;
    private String senha;
    private String tabGrupo;
    private Connection con;    
}
arthurthiago

será que não pode ser um erro do banco de dados?

Giulliano

putz…olha sobre o erro continuar…faça uma verificação

exatamente antes de dar o select

e verifique se as variaveis possuem algum valor…pq antes o erro estava aconecendo por causa da variavel estar vazia…eu inclusive reescrevi seu código mudando só akela parte e funcionou…

e o erro de suitable driver…procura no google diretinho…mas acredito eu que seja uma versao de jdbc imcompátivel com o seu bd…não sei ao certo…

[/]'s

arthurthiago

Cara… eu soh conseguir dar um jeito nesses problemas que tavam rolando ai mudando o banco de dados para MySQL e não mais o Access…

Com o mesmo código, só mudando a URL e o usuario e senha o programa funcionou como o esperado… =P

Então eh isso… vlw a galera que postou ai!!

flw!

Criado 9 de fevereiro de 2007
Ultima resposta 12 de fev. de 2007
Respostas 10
Participantes 4