Metodo Atualizar

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 é:

[code]

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);
			
		}
	});
[/code]	

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?

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.

Olá, fiz o q mandaste, deixei igualzinho

[code]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;
}[/code]

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

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

[code]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;
}

}[/code]

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?

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