Versão atual:

Método está inserindo registros repetidos no banco, mesmo com Verificação...

Bom dia galera ! Estou fazendo uma verificação na minha aplicação para evitar a inserção de registros repetidos no banco de dados. A lógica é a seguinte: faço uma consulta no banco de dados comparando os dados (data e hora) obtido de um arquivo de texto, com os respectivos campo na tabela do banco de dados. Se os dados do arquivo baterem com os mesmos valores dos campos da tabela, esses dados serão ignorados e não serão adicionados ao banco. O problema se dar porque a consulta esta retornando vazia, quando na verdade ha vários registros com esses campos repetidos. Já executei o sql direto no banco e funciona normalmente, mas na minha aplicação nada! OBS: a tabela pode ter registros com os campos data e hora repetidos, não pode ter é registro com a COMBINAÇÃO desses dois campos repetidos, pois não existe duas horas iguais para uma mesma data. Segue abaixo os códigos. De já agradeço!

Trecho de codigo da verificação

// Verifica se a lista esta vazia                                
                if(dao.verificaRegistroExistente().isEmpty()){
                    dao.adiciona(registro);
                    System.out.println("Gravado!");                     
                }else{                    
                    System.out.println("Registro já existente no Banco!");
                }

Metodo "verificaRegistroExistente()"

public List<RegistroClimaBean> verificaRegistroExistente() {
        String sql = "SELECT data, hora FROM registro_clima WHERE data = ? AND hora = ?";
        List<RegistroClimaBean> registros = new ArrayList<RegistroClimaBean>();
        // criando o objeto registro
        RegistroClimaBean registro = new RegistroClimaBean();
        try {
            // prepared statement para inserção
            PreparedStatement stmt = connection.prepareStatement(sql);

            // seta os valores
            stmt.setDate(1, registro.getData());
            stmt.setTime(2, registro.getHora());

            ResultSet rs = stmt.executeQuery();
            while (rs.next()) {
                registro.setData(rs.getDate("data"));
                registro.setHora(rs.getTime("hora"));
                // adicionando o objeto a lista
                registros.add(registro);
            }
            rs.close();
            stmt.close();
            return registros;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

Versões(2):

Ver a versão formatada

Lista.isEmpty() retorna vazio quando não deveria...

Comentário

new question