[Resolvido] Comparando ResultSet

6 respostas
The_Rogue

Boa tarde gente,

Galera eu to necessitando saber se um determinado produto existe para ai sim ele existindo eu permitir que um valor dele seja removido, tentei fazer com o rs.next() e mudando a variavel para true caso existir registros caso não exista ele não deixa remover.

Exempo:

Tenho um produto que foi cadastrado, esse produto tem lotes e quantidade. Antes de remover necessito se existe esse produto e esse lote para ai permitir ser retirado a quantidade que o usuarios quer da quantidade que ele ja tem.

Segue o codigo que to usando para consultar:
public boolean constlote(int id, String lote) throws Exception {
		boolean retorno = false;
		getConexao();
		String query = "Select * from lote where medicamento_idproduto=? and n_lote=?";
		pstmt = con.prepareStatement(query);
		pstmt.setInt(1, id);
		pstmt.setString(2, lote);
		pstmt.execute();

		while(rs.next()){
			retorno = true;
		}

		return retorno;
	}
Codigo do método que chama a consulta.
public boolean constlote() {
		boolean retorno = false;
		boolean consulta = false;
		try {
			EstoqueDAO pd = new EstoqueDAO();			
			if(pd.constlote(Integer.parseInt(txtidmedicamento.getText()),txtlote.getText())){
				retorno = true;
			}
		} catch (Exception e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null,
					"Erro Geral, por favor entre em contato com o Administrador do Sistema.", "Atenção",
					JOptionPane.ERROR_MESSAGE);
		}
		return retorno;
	}
Codigo do botão
JButton btnAtualizar = new JButton("Atualizar");
		btnAtualizar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if(constlote()){
					JOptionPane.showMessageDialog(null,
							"Existe o Lote!", "Atenção",
							JOptionPane.ERROR_MESSAGE);
				}else{
					JOptionPane.showMessageDialog(null,
							"Não Exite Lote!", "Atenção",
							JOptionPane.ERROR_MESSAGE);
				}
			}
		});
		btnAtualizar.setBounds(291, 289, 89, 23);
		panel.add(btnAtualizar);
Erro exibido:
java.lang.NullPointerException
	at persistencia.EstoqueDAO.constlote(EstoqueDAO.java:52)
	at visao.JanelaMovimentarEntrada.constlote(JanelaMovimentarEntrada.java:133)
	at visao.JanelaMovimentarEntrada$3.actionPerformed(JanelaMovimentarEntrada.java:108)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Onde é que ta errado?

Ele diz que o erro ta aqui:
while(rs.next()){
			retorno = true;
		}

6 Respostas

A

no método constlote, na linha 8:

pstmt.execute();

troque por isto:

rs = pstmt.executeQuery();

Detalhe… não estou vendo aí onde está declarado o objeto rs … talvez esteja como um atributo da classe, ele é global, é isso?

The_Rogue
Bom amigo, vou testar isso que você falou e sobre sua pergunta o rs, esta nessa classe que a chamo de DAO, onde fica a conecção do banco.
package persistencia;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;


public class DAO {
	Connection con;
	
	PreparedStatement pstmt;
	
	ResultSet rs;
	
	public void getConexao()throws Exception{
        String url = "jdbc:mysql://localhost:3306/siscef_db";
        String user = "root";
        String password = "";
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection(url, user, password);
	}
	
}

#edit
Mesmo modificando o que vc falou, continuar o mesmo erro.

A

poste o código completo da classe EstoqueDAO… não consegui entender bem isso

The_Rogue

Segue o código:

package persistencia;


public class EstoqueDAO extends DAO {

	public void cadmedicamento(String nome_produto, int qtd_minima)
			throws Exception {
		getConexao();
		String query = "INSERT INTO medicamento(nome_produto,qtd_minima)VALUES(?,?)";
		pstmt = con.prepareStatement(query);
		pstmt.setString(1, nome_produto);
		pstmt.setInt(2, qtd_minima);
		pstmt.execute();
	}

	public void cadfabricante(String nome_fabricante, String endereco,
			String tele_contato, String email, String marca) throws Exception {
		getConexao();
		String query = "INSERT INTO fabricante (nome_fabri,end_fabri,telcontato_fabri,email_fabri,marca_fabri) VALUES (?,?,?,?,?)";
		pstmt = con.prepareStatement(query);
		pstmt.setString(1, nome_fabricante);
		pstmt.setString(2, endereco);
		pstmt.setString(3, tele_contato);
		pstmt.setString(4, email);
		pstmt.setString(5, marca);
		pstmt.execute();
	}

	public void cadlote(int medicamento, String nlote, int fabri,
			String qtdlote, String valilote) throws Exception {
		getConexao();
		String query = "INSERT INTO lote (n_lote,dt_validade,qtd_lote,fabricante_idfabricante,medicamento_idproduto) VALUES (?,?,?,?,?)";
		pstmt = con.prepareStatement(query);
		pstmt.setString(1, nlote);
		pstmt.setString(2, valilote);
		pstmt.setString(3, qtdlote);
		pstmt.setInt(4, fabri);
		pstmt.setInt(5, medicamento);
		pstmt.execute();
	}

	public boolean constlote(int id, String lote) throws Exception {
		boolean retorno = false;
		getConexao();
		String query = "Select * from lote where medicamento_idproduto=? and n_lote=?";
		pstmt = con.prepareStatement(query);
		pstmt.setInt(1, id);
		pstmt.setString(2, lote);
		pstmt.executeQuery();

		if(rs==null){
			retorno = true;
		}

		return retorno;
	}

}

Edit: Onde vc ver rs==null leia rs !== null, mas tb nao foi.

A

Certo colega… ainda vejo a solução no mesmo ponto. Como disse antes… o seu objeto rs está nulo.
tente exatamente isso: troque a linha 49, onde está

por isto:

The_Rogue

Vlws Man, deu certinho agora!!!

Obrigado mesmo.

Criado 11 de fevereiro de 2012
Ultima resposta 11 de fev. de 2012
Respostas 6
Participantes 2