Metodo Atualizar

5 respostas
S
To fazendo o ATUALIZAR no bd.. o meu eh amis facil, pois s´´o tem 2 parametros,que é a referencia e o nome. meu metodo NO Controle é:
public String AtualizarProduto(String referencia,String nome, ProdutoBin ProBin){
		conexao bd = new conexao();
		String retorno = "erro";
		int res;
		
		try{
			Connection ExConn = bd.abrirBDConn();
			Statement stmt = ExConn.createStatement();
			res = stmt.executeUpdate("UPDATE mappingbabybd.bolsa SET ref = '"+referencia+"', nome = '"+nome+"' WHERE ref = " + ProBin.getReferencia()+"'");
			if(res==1) JOptionPane.showMessageDialog(null, "O produto foi atualizado com sucesso.");
			stmt.close();
			bd.fecharBDConn();
		}catch(Exception e){
			JOptionPane.showMessageDialog(null, "O produto não foi atualizado.");
			
		}return retorno;
	}
e no botao é:
JButton btnAtualizar = new JButton("Salvar");
		btnAtualizar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				
				ProBin.setReferencia(ref_text.getText());
				ProBin.setNome(nome_text.getText());
				BancoControl.AtualizarProduto(ref_text.getText(), nome_text.getText(), ProBin);
				
			}
		});

pela logica está tudo certo, ao clicar no botao salvar ele pega os valores dos campos ref_text e ref_nome e joga no ProBin.
Ai chama o metodo do controle AtualizarProduto que manda como parametro os valores dentro dos campos ref_text e ref_nome e o ProBin.
no metodo ele da um update, setando os valores novos.
Na logica esta correto né?
mas quando clico no atualizar, ele ja parte pra msg ( O produto não foi atualizado.)
Tem alguma sugestao?

Eu coloquei um System.out.println(res); antes do if, e o comando sql ta retornando 0, por isso qeu ele nao esta dando o UPDATE.
acho que tem algum erro na string do UPDATE. mas n consigo achar qual. Eu tb ja testei pra saber se tem algum valor no ProBin, e os valores estao nele. só falta atualizar certo. estou errado em algum ponto da string?

5 Respostas

L

Cara ta faltando uma ’ depois do where

Está assim:

WHERE ref = " + ProBin.getReferencia()+"'");

Deveria estar assim:

WHERE ref = ' "+ProBin.getReferencia()+" ' ");

Uma boa dica é quando você trabalhar com try/catch no catch sempre imprimir no console o stacktrace da exception facilita muito o debug, um exemplo:

catch(Exception e){
	       JOptionPane.showMessageDialog(null, "O produto não foi atualizado.");
               e.printStackTrace();//isso imprime as exceções
}

Outra boa recomendação é utilizar o PreparedStatement para que você não tenha que ficar concatenando strings e ele evita SQL Injection.

Outra coisa pq na passagem de parâmetros para o método “AtualizarProduto” você não passa somente a classe “ProBin”, elimina a redundância de parâmetros, deixa o código mas legível e facilita uma manutenção futura.

S

Olá, fiz o q mandaste, deixei igualzinho

public String AtualizarProduto(ProdutoBin ProBin){
		conexao bd = new conexao();
		String retorno = "erro";
		int res;
		
		try{
			Connection ExConn = bd.abrirBDConn();
			Statement stmt = ExConn.createStatement();
			res = stmt.executeUpdate("update mappingbabybd.bolsa set ref = '"+ProBin.getReferencia()+"', nome = '"+ProBin.getNome()+"' WHERE ref = ' "+ProBin.getReferencia()+" ' ");
		//	System.out.println(ProBin.getReferencia());
			System.out.println(res);
			if(res==1) {JOptionPane.showMessageDialog(null, "O produto foi atualizado com sucesso.");
			stmt.close();
			bd.fecharBDConn();}
		}catch(Exception e){
			JOptionPane.showMessageDialog(null, "O produto não foi atualizado.");
			 e.printStackTrace();
		}return retorno;
	}

Passei ate o ProBin somente ocmo parametro.
mas a variavel res ainda ta retornando 0.
Continua sendo algum erro na string update?

S

Eu tb tentei usar com preparedstatement como você me instruiu, mas continua sem atualizar.

public String AtualizarProduto(ProdutoBin ProBin){
		conexao bd = new conexao();
		
		String retorno = "erro";
		PreparedStatement stmt = null;
		int res;
		
		try{
			
			Connection ExConn = bd.abrirBDConn();
			stmt = ExConn.prepareStatement("update mappingbabybd.bolsa set ref = ?, nome = ? where ref = '"+ProBin.getReferencia()+"'");
			stmt.setString(1, ProBin.getReferencia());
		    stmt.setString(2, ProBin.getNome());
			   int result = stmt.executeUpdate();
			   
				if(result>0) {JOptionPane.showMessageDialog(null, "O produto foi atualizado com sucesso.");
			stmt.close();
			bd.fecharBDConn();}
		}catch(Exception e){
			JOptionPane.showMessageDialog(null, "O produto não foi atualizado.");
			 e.printStackTrace();
		}return retorno;
	}
}
S

Descobri o problema.
O problema eh que quando eu clico na linha do jtable, os campos text field capturam a ref e o nome da linha da tabela.
ai eu mudo a ref e o nome, e quando clico em atualizar ele diz que NAO EXISTE a referencia nova que editei.
ou seja: nao estou conseguindo alterar a referencia que eu coloquei nova pela referencia que tem no banco.
ex: eu clico la na linha do jtable e os valores aparecem nos text fiel REF: AAA NOME: BBBB, ai eu edito a referencia para CCCC. ai ele diz que a referencia CCCC nao existe no meu BD. mas se eu deixar AAA e so trocar o nome, ele altera normal. como faço pra trocar as referencias?

L

Isso está parecendo erro na operação sql que voce esta fazendo.
O erro esta na condição do seu where.
tem um id na sua tabela? se tiver usa ele para colocar como condição no where.
porque a referencia que voce está tentando atualizar ela não existe ainda no seu banco.

por exemplo:

"update mappingbabybd.bolsa set ref = ?, nome = ? where id_produto = ?"); //caso o id da sua tabela tenha esse nome
            stmt.setString(1, ProBin.getReferencia());  
            stmt.setString(2, ProBin.getNome());
            stmt.setInt(3,ProBin.getId());// no caso do id do seu banco ser um inteiro. caso voce não tenha um atributo id na sua classe crie um
Criado 3 de março de 2015
Ultima resposta 4 de mar. de 2015
Respostas 5
Participantes 2