Duvida, Swing e Banco de dados (JDBC)

2 respostas
wippeldigo

Boa tarde,

Olá estou com um problema e gostaria da ajuda de vcs, tenho meu método para salvar e se já existe o registro eu altero com meu método alterar… o problema é o seguinte
da onde eu vou setar o id na minha tela, pois é passado por parametro junto com os outros atributos a serem salvos, segue meu código para ilustrar melhor o meu problema

Método alterar da classe Dao

public void alterar(RelProdutos relProdutos) throws SQLException{
		String update = "UPDATE RELPRODUTOS " +
				"SET produto = ?, operador = ?, turno = ?, lote = ?, volume = ?," + 
				"quantidade = ?, dataEntrada = ?, dataSaida = ? WHERE id = ?";
		update(update, relProdutos.getId(), relProdutos.getProduto(), relProdutos.getOperador(),
				relProdutos.getTurno(), relProdutos.getLote(), relProdutos.getVolume(),
				relProdutos.getQuantidade(), relProdutos.getDataEntrada(), relProdutos.getDataSaida());
		
	}

Método alterar da classe Controller

public void alterar(int id, String produto, String operador, String turno, int lote, int volume,
			int quantidade, String dataSaida)throws SQLException, ParseException{
		
		RelProdutos relProdutos = new RelProdutos();
		relProdutos.setId(id);
		relProdutos.setProduto(produto);
		relProdutos.setOperador(operador);
		relProdutos.setTurno(turno);
		relProdutos.setLote(lote);
		relProdutos.setVolume(volume);
		relProdutos.setQuantidade(quantidade);
		relProdutos.setDataSaida(formatarData(dataSaida));
		
		new RelProdutosDao().alterar(relProdutos);
		
	}

Método onde é chamado o alterar do JFrame

public void onClickSalvar(){
		ControleController cc = new ControleController();
		
		int txtLoteINT = Integer.parseInt(txtLote.getText());
		int txtVolumeINT = Integer.parseInt(txtLote.getText());
		int txtQuantidadeINT = Integer.parseInt(txtprodDia.getText());
		
		try {
			
			if(cc.verifyProduct(txtProduto.getText(), txtLoteINT)){
				cc.alterar(id/*<- ??*/, txtProduto.getText(), txtOperador.getText(), txtTurno.getText(), 
						txtLoteINT, txtVolumeINT, txtQuantidadeINT, lbData2.getText());
                                 System.out.println("Produto já existente, registro alterado com sucesso!!!");
			}else{
				cc.salvar(txtProduto.getText(), txtOperador.getText(), txtTurno.getText(), 
						txtLoteINT, txtVolumeINT, txtQuantidadeINT, lbDataInicio.getText(), lbData2.getText());
				System.out.println("SALVO");
			}
			
		} catch (SQLException e) {
			System.out.println("Não foi possivel salvar, " + e.getLocalizedMessage());
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}

Vejam que faço uma verificação pra que caso ja exista o registro é pra ser alterado, o problema ela ali no id do metodo alterar
no caso, como eu busco ou seto seila, o id pra se alterado com os novos valores??
espero que tenham entendido meu problema… aguardo ajuda

Abraços

2 Respostas

romarcio

Se no frame você não tem o Id, para mandar pro método alterar, então vai ter que fazer uma consulta no banco pelos parâmetros que já tem e dai então recuperar o id através do retorno dessa consulta.

jrmelo

Vou te dar um exemplo da minha classe Dao, método altera, daí você compara com a sua classe e tira as suas conclusões, pois não entendi bem qual é a sua dúvida.

public void altera(Contato contato) {

		String sql = "update contatos set nome=?, email=?, endereco=?, dataNascimento=? where id=?";

		try {
			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setString(1, contato.getNome());
			stmt.setString(2, contato.getEmail());
			stmt.setString(3, contato.getEndereco());
			stmt.setDate(4,new Date(contato.getDataNascimento().getTimeInMillis()));
			stmt.setLong(5, contato.getId());
			stmt.execute();
			stmt.close();
		} catch (SQLException e) {
			
			e.printStackTrace();
		}

	}

A classe Contato é um POJO, então não postei.

Qualquer dúvida, posta aí.

Criado 13 de novembro de 2012
Ultima resposta 13 de nov. de 2012
Respostas 2
Participantes 3