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!
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!