Modelo Tabela

12 respostas
E

Olá, estou com uma dúvida em java. Estou desenvolvendo um sistema de hotel e tenho uma tabela Hospedagem que mostra todas as hospedagens cadastradas.Esta lista vem de um Modelo Tabela. O problema é o seguinte: quando clico em uma determinada hospedagem cadastro um consumo, até aí td bem, mas se eu selecionar um outro código da hospedagem para cadastrar um novo consumo, seja para um nova hospedagem, ou para alguma que já tenha alguns consumos, o consumo cadastrado vem para o mesmo hóspede que havia selecionado primeiramente, isto é, ele gera um código de consumo a cada consumo, mas não vincula para o código daquela hospedagem que estou cadastrando, todos os consumo vão se acumulando num mesmo código hospedagem e gostaria que a cada hospedagem que tivesse um consumo já cadastrado fosse gerada uma tabela apenas o consumo do hóspede em questão e a cada novo consumo de uma nova hospedagem uma nova tabela. Não sei se fui clara!!! Isso seria possível? Estou utilizando java Swing. Por favor alguém me ajuda??Obrigada!

12 Respostas

Lucas_Camara

Coloca o código que insere o consumo no banco de dados. Precisamos ver como você está fazendo.

E

lucastody Obg! Segue código cadstrarConsumo:

private void btnCadastrarActionPerformed(java.awt.event.ActionEvent evt) {                                             
	ConsumoDAO consumoDAO = new ConsumoDAO();
	Consumo consumo1 = new Consumo();
	
	if (txtCodProduto.getText().isEmpty() || txtQuantidade.getText().isEmpty()) {
		JOptionPane.showMessageDialog(this, "Erro!! Por favor preencha os campos corretamente!!!");
	} else {
		//Passa o que e digitado para a tabela no banco
		consumo1.setCodHospedagem(Integer.parseInt(txtCodHospedagem.getText()));
		consumo1.setCodProduto(Integer.parseInt(txtCodProduto.getText()));            
		consumo1.setQuantidade(Integer.parseInt(txtQuantidade.getText()));
		consumo1.setValorConsumo(Double.parseDouble(txtValorConsumo.getText()));
		consumo1.setStatus(String.valueOf(cmbStatus.getSelectedItem()));
		
		consumoDAO.cadastrar(consumo1);
		JOptionPane.showMessageDialog(this, "Consumo cadastrado com sucesso!!!");
		limparCampos();
		mostrar(codHospedagem);
		
		conConsumo.executaSQL(
			"SELECT C.codConsumo, C.codHospedagem, P.nomeProduto AS nomeProduto, " +
			" C.quantidade, C.valorConsumo, C.status " +
			" FROM Consumo C " +
			" INNER JOIN produto AS P ON P.codProduto = C.codProduto " +
			" order by C.codConsumo ");
		
		try {
			modeloTabelaConsumo.setResult(conConsumo.resultset);
		} catch (SQLException ex) {
		}
	}
	
	txtNome.requestFocus();

	desabilitarCampos();//Desabilita campos e abaixo os botoes
	btnCadastrar.setEnabled(false);
	btnDeletar.setEnabled(false);
	btnNovo.setEnabled(true);
	btnCancelar.setEnabled(false);
E

Este método criei na tela de consumo, mas não funciona:

public void mostrar(String buscar) {
	try {
		ModeloTabelaConsumo modeloTabelaConsumo;
		ConsumoDAO consumoDAO = new ConsumoDAO();
		
		// conConsumo.abrir();
		// modeloTabelaConsumo = (ModeloTabelaConsumo) consumoDAO.mostra(buscar);
		
		modeloTabelaConsumo = new ModeloTabelaConsumo(conConsumo.resultset);
		jTableConsumos.setModel(modeloTabelaConsumo);
		txtTotalConsumo.setText("Valor R$. " + consumoDAO.totalConsumo);
	} catch (Exception e) {
		JOptionPane.showMessageDialog(rootPane, e);
	}
}
V

Olá,
você esta usando algum tipo de framework de persistência?

E

Não tenho somente a DAO, estou desenvolvendo um sistema de hotel Desktop em Java!!

V

Você poderia postar a sua classe DAO?

Lucas_Camara

Coloca o código do método cadastrar do DAO consumoDAO para a gente ver.

E

CONSUMO DAO - cadastrarConsumo

public boolean cadastrar(Object obj) {
	//Verifica se o objeto passado é do tipo Consumo
	if (obj instanceof Consumo) {
		consumoVO = (Consumo) obj; //converte de Object para Consumo
	} else {
		return false;
	}

	String sql = "INSERT INTO consumo (codConsumo, codHospedagem, codProduto, "
			+ " quantidade, valorConsumo, status)"
			+ " VALUES (?, ?, ?, ?, ?, ?)";

	try {
		//Abre a conexao com o banco
		getBanco().abrir();
		PreparedStatement stm = getBanco().getConexao().prepareStatement(sql);
		
		//Concatenação de Strings.
		stm.setInt(1, consumoVO.getCodConsumo());
		stm.setInt(2, consumoVO.getCodHospedagem());
		stm.setInt(3, consumoVO.getCodProduto());           
		stm.setInt(4, consumoVO.getQuantidade());
		stm.setDouble(5, consumoVO.getValorConsumo());
		stm.setString(6, consumoVO.getStatus());
		
		
		if (stm.executeUpdate() > 0) {
			getBanco().fechar();
			return true;
		} else {
			getBanco().fechar();
			return false;
		}
	} catch (SQLException ex) {
		getBanco().fechar();
		ex.printStackTrace();
		return false;    
	}
}
Lucas_Camara

Rode o cadastro em modo debug e veja o que é retornado dessa parte:

consumoVO.getCodHospedagem()

Veja se o código da hospedagem está de acordo para cada cadastro de consumo para hospedagens diferentes e nos diga o resultado.

V

Faz algum tempo que não utilizo JDBC deste modo, o ideal seria conferir se o que é retornado em cada um dos “consumoVO.get” esta correto.

Se todos os valores estiverem corretos, dê uma olhada no stm.executeUpdate() dentro do if, acho que não é isso, mas não custa averiguar.

Eu também estou desenvolvendo um sistema de hotel, porém em php e para web, aconselho você a ler sobre persistência de dados, Hibernate e JPA, pode parecer complicado, mas vai facilitar sua vida e deixar seus trabalhos mais completos.

E

obg vou tentar…

Jonas_B_a_r_r_o_s

elispantoja acho bom você dar uma olhada como você modelou esse sistema, ou se não modelou é bom fazer a modelagem. Por exemplo, na Classe Consumo vejo o metodo setCodHospedagem. Não seria melhor esse metodo estar em uma Classe Hospede? Quando você cria o objeto Consumo consumo1 = new Consumo(); ao que você atribui? Quem recebe esse objeto? Ao invés de criar um consumo sem definição, ou sem vinculação, seria bom você usar a composição. Por ex.Você pode criar a Classe Hospede que POSSUI um consumo.

Hospede hospede = new Hospede(new Consumo);
E na parte do SQL, seria bom você trabalhar com a PrimaryKey do hospede, e então fazer um UPDATE na tabela consumo dele assim que ele fizer um novo consumo. Parece que tambem será necessario usar chave estrangeira

Criado 17 de maio de 2016
Ultima resposta 18 de mai. de 2016
Respostas 12
Participantes 4