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

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!

  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.

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

vlw!

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

Giulliano[quote]…
Quando o certo seria:

PreparedStatement stmt = con.prepareStatement(sql);
stmt.setString(1, nome);
ResultSet rs = stmt.executeQuery(); [/quote]
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!

e outra coisa…

Quando eu debuguei deu esses dois erros:

[quote]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)
[/quote]

amigo vc ja importou os pacotes necessarios…

import java.sql.*;

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

[code]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;
    }[/code]

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

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

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!