Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DeLucca

Pré Insert ( Gerando alertas ) Java

Recommended Posts

Olá pessoal, bom dia, estou desenvolvendo um projeto controle de estoque para um posto de gasolina,

o projeto está praticamente pronto, porem eu preciso fazer alguns alertas para o usuário do sistema, vou tentar simplificar meu problema,

 

Eu tenho apenas 3 registros no meu banco, (Gasolina, Etanol e Diesel) cada um com uma quantidade.

 

eu preciso gerar alguns alertas sobre o quanto o meu usuário ainda pode inserir, então nesse caso eu vou passar um limite para meu estoque exemplo, passando uma variável da seguinte forma QuantidadeMAX = 1000;

 

então o usuário não pode inserir mais que 1000 litros de combustível. (Levando em conta que o combustível é genérico ).

assim quando ele for no Jframe de cadastro de produto, aparecera um (JOptionPane) dizendo que ele não pode inserir por que não existe espaço.

 

 

Nesse caso eu teria que fazer um pré insert, correto? vou dar um select (SUM) parar somar os valores da coluna quantidade e comparar com a minha variável quantidadeMax = 1000;

 

o problema é como eu faço esse pré insert e essa comparação?

 

abaixo tem o código do pacote DAO(Controle) onde eu faço o insert no banco.

 

alguém poderia me dar uma luz de como fazer esse alerta ?

 

agradeço desde já !!

abraços !!

    public void AddNewProduct (Product pro){
        String Url ="INSERT INTO Test(Name, Type, Quantity, Employee, Data) VALUES(?,?,?,?,?)";
        try{
            NewConnection myConn = new NewConnection();
            myConn.Connection();
            PreparedStatement myStmt = myConn.conn.prepareStatement(Url);
                myStmt.setString(1, pro.getName());
                myStmt.setString(2, pro.getType());
                myStmt.setInt(3, pro.getQuantity());
                myStmt.setString(4, pro.getEmployee());
                myStmt.setInt(5, pro.getData());
                myStmt.execute();
                JOptionPane.showMessageDialog(null, "Registro feito com sucesso"); 
                myConn.Disconnect();
        }catch(SQLException ex){
            System.out.println(ex.getMessage());  
        }
    }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei de onde vem esse produto, mas basta checar a quantidade que ele possui antes de fazer o insert.

Product pro = metodoQueObtemOProdutoDeAlgumLugar();

if(pro.getQuantity >= QuantidadeMAX){
   JOptionPane.showMessageDialog(null, "Sua mensagem");
   return;
}
AddNewProduct(pro);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então na verdade é o seguinte, eu tenho apenas uma tabela chamada Produto onde eu cadastro todos esses Atributos, e nessa tabela tem um atributo chamado "Quantidade" o que eu preciso fazer...

trazer a soma da coluna quantidade ou seja (somar a quantidade de todos os registros) salvar esse possível select em uma variável e comparar com o novo valor que pode ser inserido.

if ( pro.getQuantity + select do banco <=1000) {
    JOptionPane.showMessageDialog(Null, "Mensagem");
}

fiz um método nessa mesma classe de controle que faz a soma dessa quantidade, porém eu não sei como eu faço pra passar esse select para uma variável, e depois passar isso na hora de inserir um dado novo.

    public void SearchTotal(Product pro){
        String url = "select sum(Quantity) as SomaProduto from Test";
        try{
            NewConnection myConn = new NewConnection();
            myConn.Connection();
            PreparedStatement myStmt = myConn.conn.prepareStatement(url);
            ResultSet myRs = myStmt.executeQuery();
            while(myRs.next()){
               System.out.println(myRs.getInt("SomaProduto")); 
            }
            myConn.Disconnect();
            myRs.close();
           
        } catch (SQLException ex) {
           System.out.println(ex.getMessage());
        }
    } 

Desculpa minha ignorância, realmente parei nesse simples problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode retornar essa soma do método SearchTotal:

public int SearchTotal(){
    int soma = 0;
    try{
        NewConnection myConn = new NewConnection();
        myConn.Connection();
        PreparedStatement myStmt = myConn.conn.prepareStatement(
              "select sum(Quantity) as SomaProduto from Test"
        );
        ResultSet myRs = myStmt.executeQuery();
        while(myRs.next()){
            soma = myRs.getInt("SomaProduto");
        }
        myConn.Disconnect();
        myRs.close();
    } catch (SQLException ex) {
        System.out.println(ex.getMessage());
    }
    return soma;
} 

E então chamar o método na verificação:

if ( pro.getQuantity + SearchTotal() <=1000) {
    JOptionPane.showMessageDialog(null, "Mensagem");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que entendi mas mesmo assim está tanto erro

 

Eu chamo esse método no próprio método de Insert?

    public void AddNewProduct (Product pro){
        String Url ="INSERT INTO Test(Name, Type, Quantity, Employee, Data) VALUES(?,?,?,?,?)";
        try{
            NewConnection myConn = new NewConnection();
            myConn.Connection();
            PreparedStatement myStmt = myConn.conn.prepareStatement(Url);
                myStmt.setString(1, pro.getName());
                myStmt.setString(2, pro.getType());
                if(pro.getQuantity() + SearchTotal() <= 1000){
                    JOptionPane.showMessageDialog(null, "Impossivel Inserir novo dado");
                }
                myStmt.setString(4, pro.getEmployee());
                myStmt.setString(5, pro.getData());
                myStmt.execute();
                JOptionPane.showMessageDialog(null, "Registro feito com sucesso"); 
                myConn.Disconnect();
        }catch(SQLException ex){
            System.out.println(ex.getMessage());  
        }
    }
    public int SearchTotal(){
        int soma =0;
        try{
            NewConnection myConn = new NewConnection();
            myConn.Connection();
            PreparedStatement myStmt = myConn.conn.prepareStatement(
                    "select sum(Quantity) as SomaProduto from Test");
            ResultSet myRs = myStmt.executeQuery();
            while(myRs.next()){
                soma = myRs.getInt("SomaProduto");
            }
            myConn.Disconnect();
            myRs.close();
            
        }catch(SQLException ex){
         System.out.println(ex.getMessage());
    }
        return soma;
    }
}

eu coloquei a quantidade dos registros para dar uma soma de 1000, e tentei inserir um novo dado e retornou esse erro

The value is not set for the parameter number 3.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz mais ou menos dessa maneira e está quase dando certo, porem está com alguma lógica errada, pois ele não deixa inserir quando chega no valor 1000, exemplo eu tenho 900 de total e posso inserir + 100 ele diz que o estoque está cheio. e no caso eu poderia inserir.

public void AddNewProduct (Product pro){
       // Verifica se pode fazer o Insert ou não // 
    	if(pro.getQuantity() + Total() >= QuantidadeM){
    		JOptionPane.showMessageDialog(null, "Estoque cheio");
    	} 
        else{
    	String Url ="INSERT INTO Test(Name, Type, Quantity, Employee, Data) VALUES(?,?,?,?,?)";
        
	    try{
	            NewConnection myConn = new NewConnection();
	            myConn.Connection();
	            PreparedStatement myStmt = myConn.conn.prepareStatement(Url);
	                myStmt.setString(1, pro.getName());
	                myStmt.setString(2, pro.getType());
	                myStmt.setString(3, String.valueOf( pro.getQuantity() + Total()));
	                myStmt.setString(4, pro.getEmployee());
	                myStmt.setString(5, pro.getData());
	                myStmt.execute();
	                JOptionPane.showMessageDialog(null, "Registro feito com sucesso"); 
	                myConn.Disconnect();
	    }catch(SQLException ex){
	            System.out.println(ex.getMessage()); 
	            JOptionPane.showMessageDialog(null, "ERRO"+ex);
	    }
    	}
    }

Meu método que soma a coluna está assim,

        public int Total(){
        int soma = 0;
        try{
            NewConnection myConn = new NewConnection();
            myConn.Connection();
            PreparedStatement myStmt = myConn.conn.prepareStatement("select sum(Quantity) from Test");
            ResultSet myRs = myStmt.executeQuery();
            while(myRs.next()){
                soma = myRs.getInt(1);
            }
            myConn.Disconnect();
            myRs.close();
        }catch(SQLException ex){
         System.out.println(ex.getMessage());
        }
        return soma;
    }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não faz muito sentido fazer essa verificação dentro de "AddNewProduct".

 

É mais simples fazer a verificação em alguma classe que controla esse fluxo e se for um número menor que mil, chama o método "AddNewProduct".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não faz muito sentido fazer essa verificação dentro de "AddNewProduct".

 

É mais simples fazer a verificação em alguma classe que controla esse fluxo e se for um número menor que mil, chama o método "AddNewProduct".

 

A lógica certa seria somar o total contido no banco de dados para aquele produto com a quantidade do produto a ser inserido. Esta soma, sim, não poderia passar de 1000. Novecentos e noventa e nove é menor que mil, todavia se na base de dados tiver um total de dois ítens, implicaria num cadastro de produtos maior do que o estoque comporta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.