Como fazer um update e uma consulta?

6 respostas
K

Gente me da aí uma força!!! Preciso fazer um cadastro simples com os botões de gravar, alterar , consultar e excluir… Gravar e excluir estão funcionando, mas alterar e consultar esta dando erro!!!

da uma olhada no meu código… e olhem o que estou fazendo de errado!!! Valeu e obrigado pela força…

Minha interface com usuário

import source.Cliente;

  private void btnGravarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        int codigo = Integer.parseInt(txtCodigo.getText());
        String nome = txtNome.getText();
        String sexo = (String)cbxSexo.getSelectedItem();
        
        Cliente c = new Cliente(codigo, nome, sexo);
        c.gravar();           
 } 

 private void btnAlterarActionPerformed(java.awt.event.ActionEvent evt) {                                           
        Cliente c = new Cliente();
         txtNome.setText(c.setNome());      
         cbxSexo.setText(c.setSexo());         
 }

classe Cliente

import db.Conexao;

public class Cliente {
    
        private int codigo;
        private String nome, sexo;
        private Conexao con = null;


   public Cliente(int codigo, String nome, String sexo) {
            this.setCodigo(codigo);
            this.setNome(nome);
            this.setSexo(sexo);
            con = new Conexao();
            con.getConnection();
            
    }

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }
    
    public void gravar(){
        String sql= "Insert into cliente values ("+getCodigo()+", '"+getNome()+"', '"+getSexo()+"')";
        // System.out.println("sql = "+sql);
        con.executarSQL(sql);
        
    }
    

}

Conexão

import java.sql.*;
import java.sql.CallableStatement; 
import javax.swing.*;


public class Conexao implements java.io.Serializable {

    private Connection con = null;
    private Statement stm = null;
    private ResultSet rs = null;

    private String hostName = null;
    private String userName = null;
    private String password = null;
    private String url = null;
    private String jdbcDriver = null;
    private String dataBaseName = null;
    private String dataBasePrefix = null;
    private String dabaBasePort = null;


   public Conexao() {
        super();
        hostName = "localhost";
        dataBaseName = "java";
        userName = "root";
        password = "banco"; // SENAC e CASA
        jdbcDriver = "org.gjt.mm.mysql.Driver";
        dataBasePrefix = "jdbc:mysql://";
        dabaBasePort = "3306";

        url = dataBasePrefix + hostName + ":"+dabaBasePort+"/" + dataBaseName;
        getConnection();
    }

      public void getConnection() {
        try {
          if (con == null) {
            Class.forName(jdbcDriver);
            con = DriverManager.getConnection(url, userName, password);
          } else if (con.isClosed()) {
            Class.forName(jdbcDriver);
            con = DriverManager.getConnection(url, userName, password);
            }
        } catch (ClassNotFoundException e) {
           e.printStackTrace();
        } catch (SQLException e) {
          e.printStackTrace();
        }
   }

      public void closeConnection() {
        if (con != null) {
          try {
            con.close();
          } catch (SQLException e) {
             e.printStackTrace();
          }
        }
      }

    public ResultSet consultar(String query)
    {

        getConnection();
        ResultSet rs = null;
        try {
                Class.forName(jdbcDriver);
              Statement stm = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
              rs = stm.executeQuery(query);
              return rs;
      }
      catch (SQLException e)
      {
          JOptionPane.showMessageDialog(null, " Erro na execução do metodo consultar! \n" + e.getMessage());
          return null;
      }
      catch(ClassNotFoundException e) {
          JOptionPane.showMessageDialog(null, "excessao - Classe Nao Encontrada: "+e.getMessage());
         e.printStackTrace();
          return null;
      }

        finally {
        }
  }
     public void executarSQL(String sql){

        getConnection();
         try {
              Class.forName(jdbcDriver);
              Statement stm = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
              stm.executeUpdate(sql);

        } catch(ClassNotFoundException e) {
            JOptionPane.showMessageDialog(null, "excessão Classe não encontrada: "+e.getMessage());
            e.printStackTrace();
        } catch(SQLException e) {
            JOptionPane.showMessageDialog(null, "Erro na execução do método executarSQL() - "+e.getMessage());
            e.printStackTrace();
        } finally {
               
        }
     }

}

6 Respostas

C

Olá keke,

Qual erro?

K

O pior q não da erro… acho q não estou sabendo ultilizar metodo alterar

M

Opa,

Afinal qual é tua instrução SQL de update, porque aí não tem nenhuma.

:joia:

BrunoBastosPJ

pra alterar, se você vai usar essa query

F

Olá keke, tudo bem?

Ao invés de usar o UPDATE no sql, você pode usar até mesmo o update do resultset, fica mais elegante.

No seu statement,

Você esta dizendo que vai criar um statement q nao pode ser navegável e q não poderá ser atualizável, se você trocar por READ_ONLY por UPDATABLE você pode fazer um select normal, "SELECT * FROM PESSOA WHERE ID=1"; e usar o proprio resultset pra alterar assim:

ResultSet res = ...sua execução res.updateString("NOME",pessoa.getNome()); res.updateInt("IDADE",pessoa.getId()); res.updateRow(); //nao esquecer isso!!! senao nao atualiza
Que ele atualiza esse registro que você fez no select.

Dependendo da sua aplicação as vezes fica menos ou mais rápido,
tem uma java magazine que trata legal isso, o titulo era
Turbinando com JDBC, algo assim q não lembro, mas da uma olhada no site da javamagazine.

Lá tem tudo de jdbc q vc precisa!

[]s

Renato

[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos - marcossousa[/color][/size] :joia:

F
package projetomail.cadastroCliente;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import projetomail.conexao.GerenciadorBancoDados;

/**
 *
 */
public class CadClienteDb {
    
       /* Padrão singleton
     *
     * Na engenharia de software, o padrão de projetos singleton é utilizado para restringir
     * a instância de uma classe para um (ou poucos) objeto. Singleton é útil quando exatamente
     * um objeto é necessário para coordenar as ações entre sistemas ou camadas de um sistema.
     * Também é util para otimizar o uso de recursos de hardware (ex. memória). É considerado um anti-padrão se utilizado para simular variáveis globais.
     *
     * O padrão singleton é implementado através da criação de classes com um método que cria
     * uma nova instância do objeto, caso não exista nenhuma. Se uma instância já existe, ele
     * simplesmente retorna a referência ao objeto. Para termos certeza que o objeto não será
     * instanciado mais de uma vez, o construtor é declarado privado ou protegido. 
     */
    
    /* início da implementação do padrão singleton */
    
    /*
     *construtor privado
     *previne a instancia do objeto
     */
    
    private CadClienteDb() {
    }
    
    /*
     *Metodo estático que deve ser chamado para instanciar um objeto da classe
     */
    public static CadClienteDb  getInstance(){
        return CadClienteDb.unicaInstancia.instance;
    } 
    
     /*
     *classe interna (inner class), estática com o objeto que deverá ser usado
     */
    private static class unicaInstancia{
        private static CadClienteDb instance = new CadClienteDb();
    }
    
    /* fim da implementação do padrão singleton */
    
    /* inicio da estrutura de persistencia */
    
    /* 
     * Lista ordenada dos objetos obtidos do banco de dados 
     */
     private LinkedHashMap listaObjetos = atualizaListaObjetos();
    
    /*
     * Método sincronizado (somente uma chamada por vez) utilizado para
     * realizar a atualização da lista de objetos
     */
    private synchronized LinkedHashMap atualizaListaObjetos(){
        LinkedHashMap retorno = new LinkedHashMap(); //instancia objeto de retorno
        try{
            Connection conexao = GerenciadorBancoDados.obterConexao(); //obtem o objeto de conexão
            ResultSet resultado; // declara variável que receberá o resultado da consulta
            String sql = "select codigo, cnpj, email from cliente order by codigo"; // monta string de consulta
            PreparedStatement ps = conexao.prepareStatement(sql); // prepara a consulta para execução

            resultado = ps.executeQuery(); // executa consulta e armazena resultado no objeto resultado

            // percorre os registros retornados
            while (resultado.next()){
                CadClienteMd clienteMd = new CadClienteMd(); //instancia um objeto modelo
                clienteMd.setCodigo(resultado.getInt("CODIGO")); //Atribui o valor do campo código retornado no sql para o atributo codigo do modelo
                clienteMd.setCnpj(resultado.getString("CNPJ")); //Atribui o valor do campo cnpj retornado no sql para o atributo cnpj do modelo
                clienteMd.setEmail(resultado.getString("EMAIL"));//Atribui o valor do campo email retornado no sql para o atributo email do modelo
               
                // lPadrao.setListaItens(itensPadraoDb.getInstance().obterLista(lPadrao.getCodigo(),true));
                
                retorno.put(String.valueOf(clienteMd.getCodigo()),clienteMd); //insere objeto na lista de objetos (linkedhashmap), parâmetros: código e objeto
            }
            
        } catch (Exception e){
            System.out.println(e.getMessage());
        } finally{
            return retorno;
        }
    }
    
     /*
     * Método responsável por atualizar os dados da lista com os dados do banco
     */
    private void atualizarLista(){
        listaObjetos.clear();
        listaObjetos = atualizaListaObjetos();
    }
    
    /* fim da estrutura de persistencia */
    
    /* início dos metodos públicos para interação com a camada de controle */
    
    /*
     * Método responsável por inserir um objeto na lista de objetos existentes e 
     * executar a persistencia no banco
     * Parâmetros:
     * pObjeto: objeto de modelo com os dados que devem ser inseridos
     * Retorno:
     * true no caso de sucesso e false no caso de falha
     */
    public boolean salvarObjeto(CadClienteMd clienteMd){
        boolean retorno = false;
        try{
            Connection conexao = GerenciadorBancoDados.obterConexao(); //obtem objeto de conexao
            String sql = "insert into cliente (codigo,cnpj,email) values (?,?,?)";  //sql de inserção na tabela, no lugar dos valores utiliza-se "?", 
                                                                            //sendo que os valores serão passados depois
            PreparedStatement ps = conexao.prepareStatement(sql); //prepara o sql para execução
            ps.setInt(1, clienteMd.getCodigo()); //insere o valor do atributo código na posição 1
            ps.setString(2, clienteMd.getCnpj()); //insere o valor do atributo cnpj na posição 2
            ps.setString(3, clienteMd.getEmail()); //insere o valor do atributo email na posição 3
           
            //itensPadraoDb.getInstance().atualizarListaObjetos(pObjeto.getListaItens());
            
            ps.execute(); // executa o sql, inserindo o registro na tabela
            listaObjetos.put(String.valueOf(clienteMd.getCodigo()),clienteMd); //insere o objeto na lista de objetos
            retorno = true;
        }catch(Exception e){
            System.out.println(e.getMessage());
            retorno = false;
        }finally{
            return retorno;
        }
    }
    
     /*
     * Método responsável por atualizar (alterar) um objeto na lista de objetos existentes e 
     * executar a persistencia no banco
     * Parâmetros:
     * pObjeto: objeto de modelo com os dados que devem ser inseridos
     * Retorno:
     * true no caso de sucesso e false no caso de falha
     */
    public boolean atualizarObjeto(CadClienteMd clienteMd){
        boolean retorno = false;
        try{
            Connection conexao = GerenciadorBancoDados.obterConexao();//obtem objeto de conexao
            String sql = "update cliente set cnpj = ?, email = ? where codigo = ?"; //sql de alteração do registro, no lugar dos valores utiliza-se "?", 
                                                                        //sendo que os valores serão passados depois
            PreparedStatement ps = conexao.prepareStatement(sql);//prepara o sql para execução
            ps.setString(1, clienteMd.getCnpj());//insere o cnpj do atributo cnpj na posição 1
            ps.setString(2, clienteMd.getEmail());//insere o email do atributo email na posição 2
            ps.setInt(3,clienteMd.getCodigo());//insere o valor do atributo código na posição 3
            ps.execute();// executa o sql, alterando o registro na tabela
           
            //itensPadraoDb.getInstance().atualizarListaObjetos(pObjeto.getListaItens());
            
            listaObjetos.put(String.valueOf(clienteMd.getCodigo()),clienteMd); //sobrepoe o objeto da lista de objetos com o objeto alterado
            retorno = true;
        }catch(Exception e){
            System.out.println(e.getMessage());
            retorno = false;
        }finally{
            return retorno;
        }                               
    } 
    
     /*
     * Método responsável por excluir um objeto na lista de objetos existentes e 
     * executar a persistencia no banco
     * Parâmetros:
     * pObjeto: objeto de modelo com os dados que devem ser inseridos
     * Retorno:
     * true no caso de sucesso e false no caso de falha
     */    
    public boolean excluirObjeto(CadClienteMd clienteMd){
        boolean retorno = false;
        try{
            Connection conexao = GerenciadorBancoDados.obterConexao();//obtem objeto de conexao
            String sql = "delete from cliente where codigo = ?"; //sql de exclusão do registro, no lugar dos valores utiliza-se "?", 
                                                                //sendo que os valores serão passados depois
            PreparedStatement ps = conexao.prepareStatement(sql);//prepara o sql para execução
            ps.setInt(1,clienteMd.getCodigo());//insere o valor do atributo código na posição 1
            ps.execute();// executa o sql, excluindo o registro na tabela
            listaObjetos.remove(String.valueOf(clienteMd.getCodigo()));//remove o objeto da lista de objetos
            retorno = true;
        }catch(Exception e){
            System.out.println(e.getMessage());
            retorno = false;
        }finally{
            return retorno;
        }
    }   
    
     /*
     * Método responsável por retornar um objeto da lista de objetos existentes 
     * Parâmetros:
     * pCodigo: chave do objeto que deseja retornar
     * pAtualizar: indica se quer realizar a atualização da lista com os dados do banco antes de localizar um objeto
     * Retorno:
     * Objeto solicitado ou null caso não encontre
     */    
    public CadClienteMd procurarObjeto(int pCodigo, boolean pAtualizar){
        if (pAtualizar)
            atualizarLista();
        if (listaObjetos.containsKey(String.valueOf(pCodigo)))
            return (CadClienteMd) listaObjetos.get(String.valueOf(pCodigo));
        else
            return null;
    }
    
     /*
     * Método responsável por retornar a lista de objetos existentes
     * Parâmetros:
     * pAtualizar: indica se deve ser chamado o método que atualiza a lista com os dados do banco
     * Retorno:
     * ArrayList de objetos
     */
     public ArrayList obterLista(boolean pAtualizar){
        if (pAtualizar)
            atualizarLista();
        return new ArrayList(listaObjetos.values());
    }    
    
    /* fim dos metodos públicos para interação com a camada de controle */

    
    
}

[size="11"][color="red"]* Editado: Lembre-se de utilizar BBCode em seus códigos - marcossousa[/color][/size] :joia:

Criado 6 de junho de 2006
Ultima resposta 22 de jun. de 2006
Respostas 6
Participantes 6