Erro mysql / java [ RESOLVIDO ]

14 respostas
kaiof

Olá ! sou novo no fórum, mas já vinha acompanhando a um certo tempo e sempre encontrei a solução para os meus problemas. Enfim, estou aprendendo a desenvolver em java, e nessa fase sempre surgem dúvidas e erros, nesse caso o erro ocorreu no login de uma aplicação desktop…será que alguem pode me ajudar com esse problema…?

java.sql.SQLException at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926) at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:815) at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5528) at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5448) at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5488) at br.com.livra.main.TestLivra.Valida(TestLivra.java:115) at br.com.livra.main.TestLivra$1.actionPerformed(TestLivra.java:63) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6263) at javax.swing.JComponent.processMouseEvent(JComponent.java:3255) at java.awt.Component.processEvent(Component.java:6028) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4630) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2475) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

desde já, agradeço ! :smiley:

14 Respostas

Rafael_Marques1

código?

blackfalcon

Coloque o codigo para que possamos analiza-lo.

Abraços

kaiof

Este é o metodo que valida o usuário...

public void Valida () throws ClassNotFoundException, SQLException {
	
	int escolha;
	Metodos me = new Metodos();
	

	
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn = null;
		conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1/livraria","root","root");
		

			
		
		String n = nome.getText();
		@SuppressWarnings("deprecation")
		char[] s = pass.getPassword();
		
		Statement stm = conn.createStatement();
		
		String sql ="SELECT * FROM usuario WHERE nome='"+n+"'";
		ResultSet rs = stm.executeQuery(sql);

		
		if (rs.getString("nome").equals(n) && rs.getString("senha").equals(s)) { 
		
		JOptionPane.showMessageDialog(null, "Login efetuado com sucesso !" +"\n"+ 
				"Bem vindo ao Sistema LIVRARIA !");
		
		escolha = Integer.parseInt(JOptionPane.showInputDialog("Por favor, escolha uma opção..." +"\n"+
				"1 - Cadastrar" +"\n"+ 
				"2 - Atualizar" +"\n"+
				"3 - Deletar " +"\n"+ 
				"4 - Gerar Relatório"));
		
		switch (escolha) {
		
		case 1: {
			me.Incluir();
			break;
		}
		
		case 2: {
			me.Atualiza();
			break;
		}
		
		case 3: {
			me.Deleta();
			break;
		}
		
		case 4: {
			me.Relatorio();
			break;
		}
			
		}
		
	}else {
		
		JOptionPane.showMessageDialog(null,"Login incorreto ");
	}
}

obrigado !

blackfalcon

Amigo, sei que é besteira, mas tenta trocar o ip por localhost, e tenta.

Se nao for (acho que nao faz diferença), verefica se o login e senha batem (por padrao é root com senha nula), verefique o nome do banco. Essas informações, se for maiscula ou minuscula é relevante, entao tome cuidado.

Abraços

wolliton

cara tenta fazer o seguinte q eu acho q vai funcionar…

coloca o rs.next() depois do ResultSet rs = stm.executeQuery(sql);
ficando assim

ResultSet rs = stm.executeQuery(sql); rs.next();

kaiof

Tentei trocar o ip por localhost e verifiquei a senha no banco…está tudo ok, porém não fez diferença…também tentei colocar o rs.next depois do ResultSet rs = stm.executeQuery(sql);
Enfim, de qualquer forma valeu pela força !

nel

Posta toda a sua classe :slight_smile:

kaiof
Está é a classe que chama todos os outros métodos do aplicativo...nela também criei o metodo que valida o usuário, onde parece estar ocorrendo o erro...não sei se é correto, enfim...esse é o código ! valeu !
package br.com.livra.main;

import javax.swing.*;
import java.awt.event.*;
import javax.swing.JPasswordField;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JOptionPane;

import org.omg.CORBA.Request;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
import br.com.livra.DAO.*;
import br.com.livra.main.*;
import br.com.livra.modelo.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
import java.sql.DriverManager;
import java.awt.event.*;


public class TestLivra extends JFrame implements ActionListener {


	Metodos met = new Metodos();
	Modelo mod = new Modelo();

	JLabel lnome = new JLabel("Nome");
	JLabel lsenha = new JLabel("Senha");
	JPasswordField pass = new JPasswordField(10);
	JTextField nome = new JTextField(20);
	JPanel pane = new JPanel();
	JButton bt1 = new JButton("Logar");


public TestLivra() {

	super("Controle de Usuarios");
	setContentPane(pane);
	pane.add(lnome);
	pane.add(nome);
	pane.add(lsenha);
	pane.add(pass);
	pane.add(bt1);

	bt1.addActionListener(new ActionListener() {
		
		@Override
		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			
			try {
				Valida();
			} catch (ClassNotFoundException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			
		}
		
	
	}
	);
	
	
	setSize(300,400);
	setVisible(true);


	
}


public void Valida () throws ClassNotFoundException, SQLException {
	
	int escolha;
	Metodos me = new Metodos();
	

		
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn = null;
		conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1/livraria","root","root");
		String n = nome.getName();
		@SuppressWarnings("deprecation")
		char[] s = pass.getPassword();
		
		Statement stm = conn.createStatement();
		
		String sql ="SELECT * FROM usuario WHERE nome='"+n+"'";
		
		ResultSet rs = stm.executeQuery(sql);
		

		
		if (rs.getString("nome").equals(n) && rs.getString("senha").equals(s)) { 
		
		JOptionPane.showMessageDialog(null, "Login efetuado com sucesso !" +"\n"+ 
				"Bem vindo ao Sistema LIVRARIA !");
		
		escolha = Integer.parseInt(JOptionPane.showInputDialog("Por favor, escolha uma opção..." +"\n"+
				"1 - Cadastrar" +"\n"+ 
				"2 - Atualizar" +"\n"+
				"3 - Deletar " +"\n"+ 
				"4 - Gerar Relatório"));
		
		switch (escolha) {
		
		case 1: {
			me.Incluir();
			break;
		}
		
		case 2: {
			me.Atualiza();
			break;
		}
		
		case 3: {
			me.Deleta();
			break;
		}
		
		case 4: {
			me.Relatorio();
			break;
		}
			
		}
		
	}else {
		
		JOptionPane.showMessageDialog(null,"Login incorreto ");
	}
}



public static void main(String args[]) {

TestLivra a = new TestLivra();

}






@Override
public void actionPerformed(ActionEvent e) {
	// TODO Auto-generated method stub
	
    }

}
nel

Altere para PreparedStatement, melhor né? :slight_smile:
Outro detalhe, cadê o rs.next() antes de dar o rs.get() no seu if?

Abraços.

kaiof

Ok Nel, agora ele retornou um outro erro…poderia ajudar ?

Illegal operation on empty result set.
wolliton

Achei oq tava dando errado…

onde vc ta colocando

String n = nome.getName();

substitua por

String n = nome.getText();

que vai funcionar … testei aqui…
e tambem naum esqueça de colocar o rs.next() antes do if.

nel

[quote=kaiof]Ok Nel, agora ele retornou um outro erro…poderia ajudar ?

Illegal operation on empty result set.

Em outras palavras, “Operação ilegal em um result set vazio”.
Simples, não retornou nenhum resultado e mesmo assim você aplica um rs.get().

Faça algo como:

if(rs.next()) {
 rs.get();
  //todos os seus gets do rs.
}

Caso queira extrair todos os valores retornados, ao invés do if, utilize um while.

while(rs.next()){
  rs.get();
  //seus gets
}

No if, você diz “se houver ao menos um registro, pegue…” e no while “enquanto houver registros, pegue…”
Seria por ai…certo? :slight_smile:

Abraços.

kaiof

Ok pessoal, agora deu certo…como havia dito o williton, tinha um erro mesmo no meu String n = nome.getName quando na verdade deveria ser String n = nome.getText
Nel…Usei o while com rs.next antes dos gets…ficou ok agora…
Valeu galera…Abraços !

wolliton

COloca resolvido no seu topico [RESOLVIDO]

Criado 30 de agosto de 2010
Ultima resposta 2 de set. de 2010
Respostas 14
Participantes 5