[RESOLVIDO] Dúvida - Fazendo uma verificação no banco - Software para Biblioteca

11 respostas
Conrado_Andrade

Galera, to fazendo um programinha aqui muito simples para gerenciar uma bilbioteca. E quando vou emprestar um livro ele tem que fazer uma verificação. Ao digitar o código do livro que o usuário quer emprestar ele precisa ir no banco e verificar o campo DISPONIBILIDADE do Livro. Se no campo estiver 'Disponível' ele da um update e altera o campo para 'Indisponível'. E se estiver 'Indisponível', ou seja, se o Livro estiver emprestado ele precisa enviar uma mensagem avisando que o livro não está disponível e não pode ser locado. E é exatamente aí que eu estou com dúvida.
Não estou conseguindo fazer esta verificação. Já tentei de tudo! Se vcs puderem me ajudar eu ficaria muito grato. Esse software é meu TCC do meu Curso Técnico e preciso apresentá-lo na segunda-feira. Se alguém puder me ajudar eu ficaria muito agradecido!

Abaixo tem alguns metodos e as classes em que cada um estão.

Obs.: Estou conseguindo fazer o UPDATE de Disponivel para Indisponivel, mas antes preciso fazer essa verificação.

Classe Emprestimos

public void verifica() throws SQLException {

        Livros livros = new Livros();
        AddBD add = new AddBD();

        String sql = "select disponibilidade from cadastro_livros where codigo_livro = " + Integer.parseInt(txtCodigoLivro.getText());

        add.verificaDisponibilidade(sql);

    }

Classe AddBD

public void verificaDisponibilidade(String sql) throws SQLException {
        
        Livros l1 = new Livros();


        PreparedStatement stmt = conexao.prepareStatement(sql);

        stmt.setString(1, l1.getDisponibilidade());

        if(l1.getDisponibilidade().equals("Disponível")){
            Emprestimos emp = new Emprestimos();
            emp.empresta();
        }
        else {
            JOptionPane.showMessageDialog(null, "O livro ja está emprestado");
        }
        stmt.setString(1, l1.getDisponibilidade());
        stmt.execute();
        stmt.close();
}

Classe Emprestimos

public void empresta() throws SQLException {

        String sql = "update cadastro_livros set disponibilidade = 'Indisponível' where codigo_livro = " + Integer.parseInt(txtCodigoLivro.getText());

        Livros livros = new Livros();
        AddBD add = new AddBD();

        livros.setCodigo(Integer.parseInt(txtCodigoLivro.getText()));
        add.emprestarLivros(livros, sql);

    }

Classe AddBD

public void emprestarLivros(String sql) throws SQLException {

        PreparedStatement stmt = conexao.prepareStatement(sql);

        Livros livros = new Livros();
        livros.setDisponibilidade(sql);

        stmt.execute();
        stmt.close();

    }

11 Respostas

Conrado_Andrade

Alguém aí?

Conrado_Andrade

Alguém mais?

D

Eu dei uma olhada no seu código, tá meio confuso, vou tentar te dar uma idéia de como fazer.

Vc tem que dar o select no banco e retorna um tipo livro com todos os atributos, vc retornando esse tipo livro vc dá um get na disponibilidade dele, se for disponível, vc atualiza o objeto com o set na parte da disponibilidade, dá o update na tabela e empresta o livro, caso esteja indisponível, só não dar o update na tabela e mostrar a mensagem em algum lugar.
Uma dica: Pq vc não usa um tipo booleano pra isso? Vi que vc tá usando String.

Conrado_Andrade

Desculpe minha ignorância mas como ficaria isso? :oops:

D

Eu tenho um pronto aqui de um projeto que eu to fazendo, to fazendo o seguinte

public Computador retornaComputador(int patrimonio1) throws ClassNotFoundException, SQLException{
		Connection c = conexao.conectaBanco();
		PreparedStatement pst = c.prepareStatement("Select * from Computador where patrimonio = ?");
	
		pst.setInt(1, patrimonio1);
		
		ResultSet rs = pst.executeQuery();
		
		Computador computador = null;
		
		if(rs.next()){
			int patrimonio = rs.getInt("patrimonio");
			String departamento = rs.getString("departamento");
			int ramal = rs.getInt("ramal");
			String responsavel = rs.getString("responsavel");
			String tipo = rs.getString("tipo");
			int status = rs.getInt("status");
			
			computador = new Computador(patrimonio, departamento, ramal, responsavel, tipo, status);
		}
		return computador;
	}

Retornando o computador eu sei se ele está disponivel ou não, caso o status seja sim, atualizo o status dele com o setStatus(); e vou no método atualizaComputador, caso contrário só não chamar o método atualizaComputador. No seu caso vc adapta pra Livro. :D

public void atualizaComputador(Computador computador){
    //Dá todos os updates do computador
....
Conrado_Andrade

Valeu amigo! Vou ver se consigo fazer funcionar aqui.

Abraço!

Conrado_Andrade

Será que vc poderia mostrar sua classe “atualizaComputador()” ?

adriano_si
public void verificaDisponibilidade(String sql) throws SQLException {   
           
        Livros l1 = new Livros();   
  
  
        PreparedStatement stmt = conexao.prepareStatement(sql);   
  
        stmt.setString(1, l1.getDisponibilidade());   
  
        if(l1.getDisponibilidade().equals("Disponível")){   
            Emprestimos emp = new Emprestimos();   
            emp.empresta();   
        }   
        else {   
            JOptionPane.showMessageDialog(null, "O livro ja está emprestado");   
        }   
        stmt.setString(1, l1.getDisponibilidade());   
        stmt.execute();   
        stmt.close();   
}

Cara você passa a Query mas não a executa nunca… você tá querendo o quê ??? dá uma olhada no código do amigo depois da linha ResultSet rs = stmt.executeQuery();

Conrado_Andrade

Mas e esse stmt.execute(); não é pra executar?

D
public void atualizaComputador(Computador computador) throws ClassNotFoundException, SQLException{
		Connection c = gc.conectaBanco();
		
		PreparedStatement stmt = c.prepareStatement(" UPDATE Computador SET status = ? WHERE patrimonio = ?");
													
		stmt.setInt(1, computador.getStatus());
		stmt.setInt(2, computador.getPatrimonio());
		stmt.execute();
	}

Minha classe Computador.Java

package Modelo;

public class Computador {
	private int patrimonio;
	private String departamento;
	private int ramal;
	private String responsavel;
	private String tipo;
	private int status; // 0 - fora, 1 - serviço, 2 - saida	
	
public Computador(){
		
	}
	
	public Computador(int patrimonio, String departamento, int ramal,
			String responsavel, String tipo, int status) {
		super();
		this.patrimonio = patrimonio;
		this.departamento = departamento;
		this.ramal = ramal;
		this.responsavel = responsavel;
		this.tipo = tipo;
		this.status = status;
	}
		public int getPatrimonio() {
		return patrimonio;
	}
	public void setPatrimonio(int patrimonio) {
		this.patrimonio = patrimonio;
	}
	public String getDepartamento() {
		return departamento;
	}
	public void setDepartamento(String departamento) {
		this.departamento = departamento;
	}
	public int getRamal() {
		return ramal;
	}
	public void setRamal(int ramal) {
		this.ramal = ramal;
	}
	public String getResponsavel() {
		return responsavel;
	}
	public void setResponsavel(String responsavel) {
		this.responsavel = responsavel;
	}
	public String getTipo() {
		return tipo;
	}
	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
	public int getStatus() {
		return status;
	}
	public void setStatus(int status) {
		this.status = status;
	}		

}
Conrado_Andrade

Deu certo aqui galera! Valeu a ajuda.

:smiley:

Criado 1 de dezembro de 2010
Ultima resposta 2 de dez. de 2010
Respostas 11
Participantes 3