Problema com duplicidade

1 resposta
M
Olá pessoal!! Tenho um sistema que faz vendas. Para inserir um pedido faço da seguinte forma:
public static int inserir(Venda venda) {
		int id = 0;
		try {
						GerenciadorBD.getConexao().setAutoCommit(false);
						String sql = "Insert into venda (forma_pagamento_id_forma_pagamento, tipo_pagamento_id_tipo_pagamento, data_pedido, num_pedido, total_pedido, desconto, num_parcela, valor_parcela, sub_total, cliente_juridica_id_cliente_juridica, desconto_adicional, total_geral, peso_carga, meia_venda, desconto_total, nome_vendedor, prazo_venda) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
						PreparedStatement ps = GerenciadorBD.getConexao().prepareStatement(sql);
			
						ps.setInt(1, venda.getFormaPagamento().getIdFormaPagamento());
						ps.setInt(2,venda.getTipoPagamento().getIdTipoPagamento());
						ps.setDate(3, new Date(venda.getDataPedido().getTime()));
						ps.setInt(4, venda.getNumPedido());
						ps.setFloat(5, venda.getTotalPedido());
						ps.setFloat(6, venda.getDesconto());
						ps.setInt(7, venda.getNumParcelas());
						ps.setFloat(8, venda.getValorParcela());
						ps.setFloat(9, venda.getSubTotal());
						ps.setInt(10, venda.getClienteJuridico().getIdClienteJuridica());
						ps.setFloat(11, venda.getDescontoAdicional());
						ps.setFloat(12, venda.getTotalGeral());
						ps.setString(13, venda.getPesoCarga());
						ps.setString(14, venda.getMeiaVenda());
						ps.setFloat(15, venda.getDescontoTotal());
						ps.setString(16, venda.getNomeVenda());
						ps.setString(17, venda.getPrazo_venda());
						
						ps.executeUpdate();
						
						Statement stmt = GerenciadorBD.getConexao().createStatement();
						ResultSet rs = stmt.executeQuery("select max(id_venda) from venda");
								
						
						GerenciadorBD.getConexao().setAutoCommit(true);
						GerenciadorBD.getConexao().commit();
					
						rs.next();
						id = rs.getInt(1);
						System.out.println(id);
						
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return id;
	}
Para gerar o número do pedido faço da seguinte forma:
public static int numPedido(){
		
		int ident = 0;
		Statement stmt;
		try {
			stmt = GerenciadorBD.getConexao().createStatement();
		
		ResultSet rs = stmt.executeQuery("select max(id_venda) from venda");
		
		rs.next();
		ident = rs.getInt(1);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return ident;
	}

O que acontece é o seguinte:
Quando mais de 1 vendedor inicia uma venda mais de um pedido fica com o mesmo número. Alguém tem alguma dica??

Obrigada!

1 Resposta

C

Acho que você tem 2 opções, ou sincroniza o código ou cria uma sequence no banco.

Criado 10 de novembro de 2006
Ultima resposta 10 de nov. de 2006
Respostas 1
Participantes 2