Ref.: Pordoem minha ignorância

Boa dia a todos.

Tenho duas classes que na verdade gostaria que fosse uma, ou seja, desejo que o conteúdo de “ManutencaoTabelas” fosse herdado para “Usuario”.
Como fazer isso, segundo código abaixo?

Obrigado.

[color=red]ManutencaoTabelas[/color]

/*
 * ManutencaoTabela.java
 *
 * Created on 23 de Junho de 2007, 21:01
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package manutencoes;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Iterator;
import javax.swing.JOptionPane;

/**
 *
 * @author Paulo Roberto
 */
public class ManutencaoTabela {
    private Object Tabela;
    private Connection Conexao;
    
    public ManutencaoTabela(final Object Tabela, final Connection Conexao) {
        this.Tabela = Tabela;
        this.Conexao = Conexao;
    }

    public void IncluiRegistro() {
        this.ExecutaTransacao(this.PreparaInclusaoRegistro());
    }
    
    public void AtualizaRegistro() {
        this.ExecutaTransacao(this.PreparaAlteracaoRegistro());
    }
    
    public void ExcluiRegistro() {
        //
    }
    
    private void ExecutaTransacao(final String sbSQL) {
        HashMap hmPropriedadesAtributos = this.LeColunasTabela();

        try {
            //Prepara transação
            PreparedStatement pstmt = Conexao.prepareStatement(sbSQL.toString());
            
            //Preeche os valores
            for (Iterator it = hmPropriedadesAtributos.keySet().iterator(); it.hasNext(); ) {
                pstmt.setString((Integer) it.next(), this.TrataDadosAGravar(hmPropriedadesAtributos.get(it.next().toString())));
            }
            
            //Mostra String SQL
            System.out.println(sbSQL);

            //Executa  procedimento
            pstmt.executeUpdate();
            
            //Fecha procedimento
            pstmt.close();
            
            //Fecha conexão
            Conexao.close();
        } catch (SQLException errorSQL) {
            JOptionPane.showMessageDialog(null, errorSQL.getMessage(), "Erro SQL", JOptionPane.ERROR_MESSAGE);
            errorSQL.printStackTrace();
        }
    }
    
    private String PreparaInclusaoRegistro() {
        HashMap hmPropriedadesAtributos = this.LeColunasTabela();
        
        return sbSQL.toString();
    }
    
    private String PreparaAlteracaoRegistro() {
        HashMap hmPropriedadesAtributos = this.LeColunasTabela();
        
        return sbSQL.toString();
    }
    
    private HashMap LeColunasTabela() {
        HashMap hmCamposValores = new HashMap();
        
        return hmCamposValores;
    }
    
    private String TrataDadosAGravar(final Object ObjetoATratar) {
        String ObjetoTratado = new String();
        
         return ObjetoTratado;
    }
   
}

[color=red]Usuario [/color]

/*
 * Usuario.java
 *
 * Created on 16 de Junho de 2007, 21:58
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package tabelas;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.GregorianCalendar;
import javax.swing.JOptionPane;
import manutencoes.ManutencaoTabela;

/**
 *
 * @author Paulo Roberto
 */
public class Usuario {
    protected String NomeTabela;
    private Integer Matricula;
    private String Nome;
    private String NomeGuerra;
    private GregorianCalendar DataCadastramento;
    private String Senha;
    private GregorianCalendar ValidadeSenha;
    
    /** Creates a new instance of Usuario */
    public Usuario() {
        this.NomeTabela = "tb_Usuarios";
    }
    
    public Usuario(final Integer Matricula, final Connection Conexao) {
        this.NomeTabela = "tb_Usuarios";
//        this.getUsuario(Matricula, Conexao);
    }
    
    public String getNomeTabela() {
        return this.NomeTabela;
    }
    
    public Integer getMatricula() {
        return this.Matricula;
    }
    
    public void setMatricula(Integer Matricula) {
        this.Matricula = Matricula;
    }
    
    public String getNome() {
        return this.Nome;
    }
    
    public void setNome(String Nome) {
        this.Nome = Nome;
    }
    
    public String getNomeGuerra() {
        return this.NomeGuerra;
    }
    
    public void setNomeGuerra(String NomeGuerra) {
        this.NomeGuerra = NomeGuerra;
    }
    
    public GregorianCalendar getDataCadastramento() {
        return this.DataCadastramento;
    }
    
    public void setDataCadastramento(GregorianCalendar DataCadastramento) {
        this.DataCadastramento = DataCadastramento;
    }
    
    public String getSenha() {
        return this.Senha;
    }
    
    public void setSenha(String Senha) {
        this.Senha = Senha;
    }
    
    public GregorianCalendar getValidadeSenha() {
        return this.ValidadeSenha;
    }
    
    public void setValidadeSenha(GregorianCalendar ValidadeSenha) {
        this.ValidadeSenha = ValidadeSenha;
    }
    
    public Usuario getUsuario(final Integer Matricula, final Connection Conexao) {
        Usuario Usr = new Usuario(Matricula, Conexao);
        
        return Usr;
    }
    
    public void setUsuario(Integer Matricula, Connection Conexao)  {
        StringBuffer sbSQL = new StringBuffer()
        .append("SELECT Usuario.* ")
        .append("FROM Tb_Usuarios Usuario ")
        .append("WHERE Usuario.Matricula = " + Matricula.toString());
        
        try {
            //Prepara transação
            PreparedStatement pstmt = Conexao.prepareStatement(sbSQL.toString());
            //Atribui valores aos Parâmetros
            //stmt.setString(1, "");
            //Cria resultado
            ResultSet rs = pstmt.executeQuery();
            
            if (rs.isBeforeFirst()) {
                while (rs.next()) {
                    System.out.println(rs.getString("Nome"));
                    
                    //Atribui valores as campos da classe
                    this.setMatricula(rs.getInt("Matricula"));
                    this.setNome(rs.getString("Nome"));
                    this.setNomeGuerra(rs.getString("NomeGuerra"));
                    this.setDataCadastramento(new GregorianCalendar(2007, 3, 14));
                    this.setSenha(rs.getString("Senha"));
                    this.setValidadeSenha(new GregorianCalendar(2007, 3, 14));
                }
            }
            //Consolida transação
            Conexao.commit();
            //Fecha conexão
            pstmt.close();
            //Mostra String SQL
            System.out.println(sbSQL);
        } catch (SQLException errorSQL) {
            JOptionPane.showMessageDialog(null, errorSQL.getMessage(), "Erro SQL", JOptionPane.ERROR_MESSAGE);
            errorSQL.printStackTrace();
        }
    }
    
}

extende a classe hora!

Pois é!

Quando faço isso, a classa USUARIO reclama que “NÂO PODE ENCONTRAR O CONSTRUTOR DE MANUTENCAOTABELA”.

Teste para ver o que digo.

Por favor.

Quando você implementa um constructor, o java não forncece o contructor padrao… que nada mais é do que um constructor sem argumentos e que faz uma chamada para super()

Na sua classe pai (ManutencaoTabela) você implementou um constructor… entao quando voce faz um extends o compilador coloca uma chamada super()… mas este constructor nao existe… tenta colocar um constructor sem parametros…

Bem… apesar do texto meio confuso… espero ter ajudado.

Olá,

veja bem, na sua classe ManutencaoTabela vc declarou um construtor com argumentos. Em java, qdo vc herda uma classe mesmo que não esteja explicito o construtor da classe filha chama o construtor da classe pai.
Então é como se o construtor dessa classe estivesse assim:

public Usuario() { super(); this.NomeTabela = "tb_Usuarios"; }

Qdo chama [color=darkred]super()[/color] está chamando o construtor default (sem argumentos) da classe pai, que no caso, na classe ManutencaoTabela não existe.

Vc tem duas opção:
1 - Declarar da classe pai um construtor DEFAULT
2 - Chamar na classe filha o construtor da classe pai passando os parametros
[color=darkred]super(Tabela, Conexao);[/color]

Aí vc escolhe qual opção é mais apropriada para o seu caso.

Espero que tenha te ajudado.

kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk

Está ajudando sim.

O problema é que preciso de passar dois parâmetros para ManutencaoTabela (Ou não! - Vc. poderia me dizer isso.)

Pô valeu mesmo!

Uma pergunta: Será que estou fazendo a coisa certa?
Isso é uma boa prática?

                   Todas as minhas classes de persistência devem ter os métodos de ManutencaoTabela.

                   Seria o caso de criar uma classe ABSTRATA?