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

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);

    }[/code]

[b]Classe AddBD[/b]

[code]
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();
}
[/code]

[b]Classe Emprestimos[/b]

[code]   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

[code]
public void emprestarLivros(String sql) throws SQLException {

    PreparedStatement stmt = conexao.prepareStatement(sql);

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

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

}[/code]

Alguém aí?

Alguém mais?

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.

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

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

[code]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;
}

[/code]

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. :smiley:

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

Valeu amigo! Vou ver se consigo fazer funcionar aqui.

Abraço!

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

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();

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

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;
	}		

}

Deu certo aqui galera! Valeu a ajuda.

:smiley: