Remover dados duplicados do MySQL

1 resposta
F

Galera, sou novo aqui no fórum, fiz uma matéria esse semestre de introdução ao JAVA e como estou de bobeira aqui em casa resolvi brincar um pouco.
Começei a dois dias um programa aqui que calcula as notas pra minha faculdade, eu até que fiz alguma coisa pra quem não sabia nem como instalava o MySQL três dias atrás, mas eu estou travado aqui numa parte onde eu tenho um tabela no bando de dados, e ela possui resultados repetidos, e eu preciso excluir os resultados deixando somente os que foram adicionados mais recentemente, para isso eu fiz um contador no meu código pra saber (não consegui usar a função smalldatetime que eu vi por ai - não entra na minha cabeça), tá ai a parte que lê minha tabela (nada demais):

public void adicionahistorico(String[] materias, int[] conceito, int[] creditos) throws SQLException {
        for (int i = 0; i < creditos.length; i++) {
            String sql = "insert into historico (creditos, materias, conceito, contador)"
                    + "values (?,?,?,?)";
            PreparedStatement stmt = conexao.prepareStatement(sql);
            stmt.setInt(1, creditos[i]);
            stmt.setString(2, materias[i]);
            stmt.setInt(3, conceito[i]);
            stmt.setInt(4, i);
            stmt.execute();
            stmt.close();

        }

Agora eu não sei qual statement eu tenho que passar pra conseguir remover as entradas repetidas. O que eu fiz foi assim:

public void cria_ca() throws SQLException {
        remove_ca();
        String sql = "create table ca select materias, creditos, max(conceito), max(contador) from historico group by materias";
        PreparedStatement stmt = this.conexao.prepareStatement(sql);
        stmt.execute();
        stmt.close();  
        leitura_ca();     
    }

Apesar de conseguir visualizar a tabela do jeito que eu quero, por algum motivo que eu não sei eu não consigo acessar os dados que preciso dela:

public void leitura_ca () throws SQLException {
        String sql = "select * from ca";
        PreparedStatement stmt = this.conexao.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();
        while (rs.next()) { 
            int creditos = Integer.parseInt(rs.getString("creditos"));
            int conceito = Integer.parseInt(rs.getString("max(conceito)"));
            int multiplicacao = creditos * conceito;
            System.out.println(multiplicacao);
        }
        rs.close();
        stmt.close();
    }
}

O erro que dá é este:

12/04/2013 19:26:13 ufabc.forms.visual startActionPerformed
SEVERE: null
java.sql.SQLException: Column 'max(conceito)' not found.
Deve ser uma coisa muito idiota, mas eu estou desde as 8 da manhã varrendo o google e tentando de tudo no terminal do linux e não consigo de jeito nenhum. Agradeço desde já pela ajuda!

1 Resposta

pmlm

Usa alias.

"...max(conceito) as max_conceito, max(contador) as max_contador ..."

(...)

 int conceito = Integer.parseInt(rs.getString("max_conceito"));
Criado 12 de abril de 2013
Ultima resposta 12 de abr. de 2013
Respostas 1
Participantes 2