Java - Dúvida com o editar do banco

7 respostas
L

Olá pessoal. Bom pessoal, ja tenho feito a classe com os métodos get e set, e a classe DAO que possui os comandos sql. Ja consigo também cadastrar. Tenho esse seguinte método criado que joga na tabela os dados. Mas até ai tudo beleza.

public void listarRequerimento() throws ClassNotFoundException { 
    
    TiporequerimentoDao tiporequerimentoDao = new TiporequerimentoDao(); 
    List<Tiporequerimento> lista = tiporequerimentoDao.getLista(); /
    DefaultTableModel modelo = (DefaultTableModel) tblCadreq.getModel();
    if (modelo.getRowCount() > 0) {
        modelo.setRowCount(0);
    }
    for (Tiporequerimento tiporequerimento : lista) {
        Object[] objeto = new Object[2];
        objeto[0] = tiporequerimento.getCodigo();
        objeto[1] = tiporequerimento.getNome();
    
        modelo.addRow(objeto);
    }
}

Até ai beleza. Também criei um evento pro mouseclicked para quando clicar na tabela, jogar pros campos do textfield seus respectivos codigos e nome.

if (tblCadreq.getSelectedRow() != -1){
  txtcodReq.setText(tblCadreq.getValueAt(tblCadreq.getSelectedRow(),0).toString());
  txtnomeReq.setText(tblCadreq.getValueAt(tblCadreq.getSelectedRow(),1).toString());
  
  }
    
  txtnomeReq.setEnabled(true);

Até aqui ainda ta tudo beleza sem problemas. Agora nesse meu código do update deve ter algo errado, porque quando seleciono o item da tabela, quando clico no botão editar nada ocorre.

public void editarTiporequerimento() throws ClassNotFoundException{  //metodo para editar
    
    try{
    Tiporequerimento tiporequerimento = new Tiporequerimento();
    

    tiporequerimento.setNome(txtnomeReq.getText());  
    tiporequerimento.setCodigo(Integer.parseInt(txtcodReq.getText())); 
    
   
    TiporequerimentoDao tiporequerimentoDao = new TiporequerimentoDao();
    tiporequerimentoDao.atualiza(tiporequerimento);

//o item acima chamado atualiza , chama o método da classe que efetua o update do banco. sendo //que só tenho 2 atributos: codigo e nome
    
     JOptionPane.showMessageDialog(null,"Cadastro editado sucesso!", "Edição com sucesso",
             JOptionPane.INFORMATION_MESSAGE);
listarRequerimento(); // método necessário para atualizar a tabela.
    }catch (RuntimeException e){
        
    }
}

Quando eu seleciono o item da tabela, ele joga pros textfield seus respectivos valores, mas quando tento atualizar, nada acontece. o que será ? Tem algum comando errado no método acima ? Esse método que botei ta parecido com o método cadastrar. Se puderem ajudar fico agradecida.

7 Respostas

D

Meu caro, vc pode manda esse metodo atualizar desta classe Tiporequerimento ?

L

Da classe TiporequerimentoDao o método:

public void atualiza(Tiporequerimento tiporequerimento) {

String sql = update cadreq set nome = ? where codigo = ?;

try {

PreparedStatement stmt = this.connection.prepareStatement(sql);

stmt.setString(1, tiporequerimento.getNome());
stmt.setInt(2, tiporequerimento.getCodigo());

		stmt.execute();
	} catch (SQLException e) {
		throw new RuntimeException(e);
	}
}
D

Faz assim

public void atualizar(int Codigo, String nome) {

    SQLiteDatabase db = getWritableDatabase();
    Tiporequerimento tiporequerimento tipo = new Tiporequerimento tiporequerimento();

    String where = "codigo" + "=" + codigo;

    ContentValues cv = new ContentValues();
    cv.put("CampodoBancoNome", nome);

    db.update("Seu Banco", cv, where, null);
    db.close();
}

tente fazer desta forma, so que vc deve passa é seu codigo ou id que quer modificar, e o Nome, atualizado…

ex:
TiporequerimentoDao.atualizar(1,“meu_novo_nome”);

L

No caso SQLiteDatabase db = getWritableDatabase(); sei q tem haver com a tabela no banco. Uso postgresql. Nem sei como editar ainda essa linha.

Esse ContentValues cv = new ContentValues(); ContentValues nem reconhece. É porque ainda sou iniciante, ainda tem coisas que não tenho conhecimento.

D

OPa cara desculpa,acabei me confudindo e passando SQLite (Banco de dados do android)

Segue o correto;

public void altera(Tiporequerimento tiporequerimento){
	             conn.conectabanco();
	
		try {
			PreparedStatement pst = conn.conn.prepareStatement("update suaTabela set nome = ? where codigo=?");
			
			pst.setString(1, tiporequerimento.getNome());
			pst.setInt(2, tiporequerimento.getCodigo);
			pst.execute();
			
			JOptionPane.showMessageDialog(null, "Dados alterados com sucesso!");
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "Erro ao altera dados! \n" + e);
		}
	
	conn.desconectar();
}

tudo que vc tem que fazer é pega seu codigo e seu nome chamar o tiporequerimento e setar os valores,
chama o metodo alterar e passa seu tiporequerimento.

agora vc deve passa seu tiporequerimento

Tenta ai agora
e novamente desculpa pela minha falta de atenção :smile:

L

Isso ai ta tudo beleza. O negocio é na coluna da tabela do java. O java deve não estar detectando a coluna da tabela para fazer esta alteração

L

Vou adicionar o código da Jdialog para você v.

public void listarRequerimento() throws ClassNotFoundException {

TiporequerimentoDao tiporequerimentoDao = new TiporequerimentoDao(); //instancia de AlunoDao
    List<Tiporequerimento> lista = tiporequerimentoDao.getLista(); //faz a lista receber o método getLista() do AlunoDao.
    DefaultTableModel modelo = (DefaultTableModel) tblCadreq.getModel();
    if (modelo.getRowCount() > 0) {
        modelo.setRowCount(0);
    }
    for (Tiporequerimento tiporequerimento : lista) {
        Object[] objeto = new Object[2];
        objeto[0] = tiporequerimento.getCodigo();
        objeto[1] = tiporequerimento.getNome();
    
        modelo.addRow(objeto);
    }

}

e no evento mouse clicked tenho isso:

if (tblCadreq.getSelectedRow() != -1){

txtcodReq.setText(tblCadreq.getValueAt(tblCadreq.getSelectedRow(),0).toString());

txtnomeReq.setText(tblCadreq.getValueAt(tblCadreq.getSelectedRow(),1).toString());

}

txtnomeReq.setEnabled(true);

Só que não sei o q falta

Criado 7 de junho de 2016
Ultima resposta 8 de jun. de 2016
Respostas 7
Participantes 2