Obter penultimo registro da tabela ou o número de linhas

7 respostas
Eudes

E o seguinte…
preciso obter o penultimo registro da tabela, já tentei várias coisas como:

public int getNumeroDeLinhas() {
        try {
            conn = Conexao.getConexao();
            String sql = "SELECT COUNT(data) FROM Impressao";
            Statement st = conn.createStatement();
            int linhas = st.executeUpdate(sql);            
            conn.close();
            return linhas;
        }catch (Exception e) {
            e.printStackTrace();
        }
        return 9999;
    }

mas não esta retornado o número de linhas para poder usar em um array com o resultado do select de outro método.

se alguém puder me ajudar nisso eu agradeço

Obs: Não me deêm o peixe, me ensinem a pescar!!!

7 Respostas

victorwss

executeUpdate serve para instruções do tipo insert, update e delete. Não é para selects.
Tenta usar o executeQuery:

public int getNumeroDeLinhas() {
    Statement st = null;
    ResultSet rs = null;
    Conexao conn = null;
    try {
        conn = Conexao.getConexao();
        String sql = "SELECT COUNT(data) FROM Impressao";
        st = conn.createStatement();
        rs = st.executeQuery(sql);
        if (!rs.next()) return 0;
        return rs.getInt(1);
    } catch (SQLException e) {  
        throw new Error(e);
    } finally {
        if (st != null) st.close();
        if (rs != null) rs.close();
        if (conn != null) conn.close();
    }
}

Ah, e feche as conexões, Statements e ResultSets no finally. Nunca dentro do try.

Antes de usar o ResultSet tem que chamar o método next, para ir para o primeiro registro. Cada vez que você chama next ele vai para o próximo registro, mas neste caso o seu SQL só traz um registro.

crpablo

Eudes:
E o seguinte…
preciso obter o penultimo registro da tabela, já tentei várias coisas como:

public int getNumeroDeLinhas() {
        try {
            conn = Conexao.getConexao();
            String sql = "SELECT COUNT(data) FROM Impressao";
            Statement st = conn.createStatement();
            int linhas = st.executeUpdate(sql);            
            conn.close();
            return linhas;
        }catch (Exception e) {
            e.printStackTrace();
        }
        return 9999;
    }

mas não esta retornado o número de linhas para poder usar em um array com o resultado do select de outro método.

se alguém puder me ajudar nisso eu agradeço

Obs: Não me deêm o peixe, me ensinem a pescar!!!

Isso ae… o negócio é pescar no rio cubatão… heheh

abraço

Eudes

Victor valeu pelo help!! Funcionou :smiley:
Sou iniciante em Java e por enquanto tenho só o curso técnico, mas o Java me fascina e me espanta cada vez mais com sua amplitude.
Tenho a certeza de que realmente estou no caminho certo… e é isso que eu quero fazer. :twisted:
Valeu mesmo :smiley:

javolatra

Essa query no meu MySql Query Browser não rola, da um erro pq?

Erro: FUNCTION mega.count does not exist

Marck

victorwss:
executeUpdate serve para instruções do tipo insert, update e delete. Não é para selects.
Tenta usar o executeQuery:

public int getNumeroDeLinhas() {
    Statement st = null;
    ResultSet rs = null;
    Conexao conn = null;
    try {
        conn = Conexao.getConexao();
        String sql = "SELECT COUNT(data) FROM Impressao";
        st = conn.createStatement();
        rs = st.executeQuery(sql);
        if (!rs.next()) return 0;
        return rs.getInt(1);
    } catch (SQLException e) {  
        throw new Error(e);
    } finally {
        if (st != null) st.close();
        if (rs != null) rs.close();
        if (conn != null) conn.close();
    }
}

Ah, e feche as conexões, Statements e ResultSets no finally. Nunca dentro do try.

Por favor, pode me dizer pq quando dento fechar dentro do bloco finally o compilador diz que tenho que usar um bloco try?

Agradeço.

Essa query no meu MySql Query Browser não rola, da um erro pq?

Erro: FUNCTION mega.count does not exist

Pelo que testei aqui, é pq tem um espaço em branco entre count e o argumento: count (data).

Eudes

tinha acontecido o mesmo aqui, mas coloquei throws SQLException logo após o nome do método…

public int getNumeroDeLinhas() throws SQLException { try { conn = Conexao.getConexao(); String sql = "SELECT COUNT(data) FROM Impressao"; st = conn.createStatement(); rs = st.executeQuery(sql); if (!rs.next()) return 0; return rs.getInt(1); } catch (SQLException e) { throw new Error(e); }finally{ if(conn != null) conn.close(); if(st != null) conn.close(); if(rs != null) rs.close(); } }

e ai funcionou :smiley:

Marck

Eudes:
tinha acontecido o mesmo aqui, mas coloquei throws SQLException logo após o nome do método…

public int getNumeroDeLinhas() throws SQLException { try { conn = Conexao.getConexao(); String sql = "SELECT COUNT(data) FROM Impressao"; st = conn.createStatement(); rs = st.executeQuery(sql); if (!rs.next()) return 0; return rs.getInt(1); } catch (SQLException e) { throw new Error(e); }finally{ if(conn != null) conn.close(); if(st != null) conn.close(); if(rs != null) rs.close(); } }

e ai funcionou :D

Acho que entendi. Com o throws ele informa que pode lancar uma excecao SQLException…

valeu!

Criado 4 de janeiro de 2008
Ultima resposta 5 de jan. de 2008
Respostas 7
Participantes 5