Problema com consulta mysql

lance é o seguinte da erro na hora de pegar o max(codcliente) exibe “deu erro”

stacktrace
ava.sql.SQLException: Before start of result set
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.ResultSet.checkRowPos(ResultSet.java:703)
at com.mysql.jdbc.ResultSet.getInt(ResultSet.java:2605)
at com.mysql.jdbc.ResultSet.getInt(ResultSet.java:2747)

 try {
                                    // stmt.executeUpdate("INSERT into livros (id,titulo) values ("+id+","+titulo+")" );    //stmt.executeUpdate("INSERT into autor (nome) values ('"+nome+"')");  
            principal.stm.executeUpdate("INSERT INTO cliente(codcliente,nome,end,bairro,cep,tel,cnpj,inse,representante,obscli) VALUES('"+0+"','"+nome+"','"+end+"','"+bairro+"','"+cep+"','"+tel+"','"+cnpj+"','"+inse+"','"+representante+"','"+obscli+"')");
            JOptionPane.showMessageDialog(null,"Cadastro efetuado com sucesso!");
        } catch (SQLException ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null,"Não foi possivel cadastrar");
        }
        try {
             
             rs = principal.stm.executeQuery("select max(codcliente) AS maximo from cliente");
             codigo = rs.getInt("maximo");
            
            JOptionPane.showMessageDialog(null,"Codigo do cliente: "+codigo);
        } catch (SQLException ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null,"deu erro ");
        }

que vida de leozim em pleno domingo trabalhando feito corno aeuaeuhaeuhea

Antes da linha:

codigo = rs.getInt("maximo");

Você deve pôr:

rs.next();

Ou seja:

rs.next();
codigo = rs.getInt("maximo");

vlw irmao to o dia todo aki nem raciocino mais uhaeuheahu vlw mermo