Erro ao dar um SELECT no banco de dados [ Resolvido ]

17 respostas
Pilantra

Olá pessoal,

Estou com um problema grave aqui. Faz muito tempo que eu não mexo com Java com Banco de Dados então estou meio perdido hehe. Eu coloquei no método do botão Logar, para verificar se o tal usuário informado está cadastrado ou não, como eu estava testando antes de deixar apresentável eu fiz assim:

try {
            Connection conn = null;
            Statement stm;
            ResultSet rs;
            int resultado = 0;
           
            stm = conn.createStatement();
            rs = stm.executeQuery("SELECT * FROM users WHERE login = 'pilantra' AND senha = '123456'");
            rs.last();
            resultado = rs.getRow();
            if (resultado != 0) {
                System.out.println("Logado");
            } else {
                System.out.println("Não Logado");
            }
   } catch (SQLException e) {
      System.out.println("Houve um problema ao executar a query.");
   }

Ele compila tudo certinho, mas quando eu clico no botão, ele joga essa mensagem de erro:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at systemweb.login_senha.jButton1ActionPerformed(login_senha.java:151)
        at systemweb.login_senha.access$000(login_senha.java:16)
        at systemweb.login_senha$1.actionPerformed(login_senha.java:97)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:5501)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
        at java.awt.Component.processEvent(Component.java:5266)
        at java.awt.Container.processEvent(Container.java:1966)
        at java.awt.Component.dispatchEventImpl(Component.java:3968)
        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:3892)
        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)

Qual será o problema? O mysql, o driver, o login e senha do banco de dados estão corretos, eu não sei o porque estar dando erro. Alguém pode me ajudar?

Obrigado.

17 Respostas

peerless

no lugar de rs.last… rs.getrow… bla bla…
tenta:

if (rs.next)
System.out.println(“User logado com sucesso”);

P

Você não criou a sua conexão… criou conn = null e depois saiu usando conn sem ter inicializado…

Pilantra

Não deu certo, continua dando aqueles erros!! =\

P

nao deu certo o q? o .next ou inicializar a conn?

Pilantra

Não deu certo o .next!! Eu não entendi o que você falou sobre o conn? Como eu devo inicializar ela?

peerless

Tenho uns métodos que fiz para melhor lhe dar com isso…

Ve se isso ajuda:

public java.sql.Connection conectaBD(String nome_banco) throws ClassNotFoundException, SQLException { Class.forName("com.mysql.jdbc.Driver"); String query = "jdbc:mysql://localhost/" + nome_banco + "?user=root"; c = DriverManager.getConnection(query); return c; }

como usar:

try { seu_statement=conectaBD(banco).createStatement(); } catch (SQLException ex) { ex.printStackTrace(); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } //aqui em diante seus codigos de ResultSet utilizando o seu_statement

nbluis

Car… sinceramente acho que esse problema nao é no banco e sim na sua interface grafica … olha a excessão…

P

Usando PostgreSQL seria assim… adapta pro seu BD

Connection conexao;
	
	public DAO (){		
		try {
			Class.forName("org.postgresql.Driver");
		} catch (ClassNotFoundException e) {
			System.err.println(e.getMessage());
		}
		try {
			conexao = DriverManager.getConnection("jdbc:postgresql://localhost:5432/NOMEDOBD?user=NOMEDOUSER&password=SENHADOUSER");
		} catch (SQLException e) {
			System.err.println(e.getMessage());
		}
		
	}
Pilantra

E ae galera, valeu pelas dicas mas ainda não está funcionando!!

Vejam que engraçado, eu mudei todo o código.

Statement stm;
        Connection connection = null;
        ResultSet rs;
        String serverName = "localhost";
        String mydatabase = "system_web";
        String url = "jdbc:mysql://" + serverName + "/" + mydatabase; // a JDBC url
        String username = "root";
        String password = "";
        
            try {
                // Carregando o JDBC Driver
                String driverName = "org.gjt.mm.mysql.Driver"; // MySQL MM JDBC driver
                Class.forName(driverName);

                // Criando a conexão com o Banco de Dados
                connection = DriverManager.getConnection(url, username, password);
                
                stm = connection.createStatement();
		rs = stm.executeQuery("INSERT INTO users VALUES('','pilantra','123456','Pilantra')");
                } catch (ClassNotFoundException e) {
                    //Driver não encontrado
                    System.out.println("O driver expecificado não foi encontrado.");
                } catch (SQLException e) {
                    //Não está conseguindo se conectar ao banco
                    System.out.println("Não foi possível conectar ao Banco de Dados");
            }

Mas ele retorna um erro de que não consegue se conectar ao banco de dados... Mas se eu tirar o stm e o rs, ele não retorna erro nenhum. E agora? :S

nbluis

nbluis:
Car… sinceramente acho que esse problema nao é no banco e sim na sua interface grafica … olha a excessão…

Tu deu uma olhada nisso?

Pilantra

Então, agora o erro é outro!!!

P

Cara, tu ta apssando a string server como localhost, mas tem q passar também a porta onde o teu BD roda, por exemplo, localhost:5342

Pilantra
paulohrl:
Cara, tu ta apssando a string server como localhost, mas tem q passar também a porta onde o teu BD roda, por exemplo, localhost:5342

Olá!!

Nossa agora eu fiquei encucado com isso, nada está dando certo. Vejam, eu coloquei a porta agora e mesmo assim ainda não funciona:

Statement stm;
        Connection connection;
        ResultSet rs;
        String serverName = "localhost:3306";
        String mydatabase = "system_web";
        String url = "jdbc:mysql://" + serverName + "/" + mydatabase; // a JDBC url
        String username = "root";
        String password = "";
        
            try {
                // Carregando o JDBC Driver
                String driverName = "org.gjt.mm.mysql.Driver"; // MySQL MM JDBC driver
                Class.forName(driverName);

                // Criando a conexão com o Banco de Dados
                connection = DriverManager.getConnection(url, username, password);
                
                stm = connection.createStatement();
		rs = stm.executeQuery("INSERT INTO users VALUES('','pilantra','123456','Pilantra')");
                } catch (ClassNotFoundException e) {
                    //Driver não encontrado
                    System.out.println("O driver expecificado não foi encontrado.");
                } catch (SQLException e) {
                    //Não está conseguindo se conectar ao banco
                    System.out.println("Não foi possível conectar ao Banco de Dados");
            }

Ele ainda retorna o problema exception "Não foi possível conectar ao Banco de Dados" :cry:

Pilantra

Aff galera, eu nem tinha percebido a burrice. O problema era que eu estava dando um INSERT no executeQuery por isso estava dando erro, agora eu coloquei a instrução certo e funcionou hehe. Vejam:

Statement stm;
        Connection connection;
        ResultSet rs;
        String serverName = "localhost:3306";
        String mydatabase = "system_web";
        String url = "jdbc:mysql://" + serverName + "/" + mydatabase; // a JDBC url
        String username = "root";
        String password = "";
        
            try {
                // Carregando o JDBC Driver
                String driverName = "org.gjt.mm.mysql.Driver"; // MySQL MM JDBC driver
                Class.forName(driverName);

                // Criando a conexão com o Banco de Dados
                connection = DriverManager.getConnection(url, username, password);
                
                stm = connection.createStatement();
		rs = stm.executeQuery("SELECT * FROM users WHERE login = 'pilantra' AND senha = '123456'");
                    if (rs.next()) {
                        System.out.println("Usuário Logado");
                    } else {
                        System.out.println("Usuário Não Logado");
                    }
                } catch (ClassNotFoundException e) {
                    //Driver não encontrado
                    System.out.println("O driver expecificado não foi encontrado.");
                } catch (SQLException e) {
                    //Não está conseguindo se conectar ao banco
                    System.out.println("Não foi possível conectar ao Banco de Dados");
            }

Obrigado pela ajuda galera. Me salvaram.

P

Tenta assim:

url = "jdbc:mysql://" + serverName + "/" + mydatabase + "?user=" + username + "&password=" + password;
P

Nossa, vacilo de geral… ninguém percebeu isso…
Falta de atenção… mania de procurar erros difíceis e ignorar os pequenos vacilos hehehhe

Boa Sorte ai

Pilantra

paulohrl:
Nossa, vacilo de geral… ninguém percebeu isso…
Falta de atenção… mania de procurar erros difíceis e ignorar os pequenos vacilos hehehhe

Boa Sorte ai

hahahaha bem isso mesmo, e eu refiz essa instrução umas 3 vezes e agente nem percebeu kkkkkk!!

Valeu cara, abraços!!

Criado 8 de março de 2007
Ultima resposta 8 de mar. de 2007
Respostas 17
Participantes 4