Problema com select

Gente to com um problema
Tenho uma aplicação desktop e quando faço o select ele faz certinho.
Meu problema é que na tela ele aparece o ultimo registro.
Gostaria que ele sempre carregasse o primeiro registro, e que tivesse um botão onde eu possa ir navegando pelo botão (proximo/anterior)

Já tentei usar (rs.first(),rs.last() ) só que não vai o sistema trava.
To usando o rs.next este funciona.
Alguém pode me ajudar???

[code] public void Busca (String loj){
try {
String sql = “SELECT a.id,a.loja,a.nome,a.problema,a.atendido,a.data,a.status,a.solucao FROM atendimento a where loja = '”+loj+"’ order by id";
st = connection.createStatement(rs.TYPE_SCROLL_SENSITIVE,rs.CONCUR_READ_ONLY);
rs = st.executeQuery(sql);

            List<CadastroDAO> cadastro = new ArrayList<CadastroDAO>();
            while (rs.next()) {
                id = rs.getInt("id");
                loja = rs.getString("loja");
                problem = rs.getString("problema");
                data = rs.getString("data");
                atendido = rs.getString("atendido");
                nome = rs.getString("nome");
                status = rs.getString("status");
                solucao = rs.getString("solucao");
            }


        } catch(SQLException errSQL) {
            System.out.println(errSQL.getMessage());
            errSQL.printStackTrace();
        }
        catch(Exception errGeral) {
            System.out.println(errGeral.getMessage());
            errGeral.printStackTrace();
        }
    }

[/code]

[code] private void btnPesquisarActionPerformed(java.awt.event.ActionEvent evt) {
CadastroDAO cdao = new CadastroDAO();
cdao.setLoja(txtLoja.getSelectedItem().toString());
BancoDados bd = new BancoDados();
bd.AbreConexao();
bd.Busca(cdao.getLoja());

    cdao.setId(bd.id);
    cdao.setProblema(bd.problem);
    cdao.setData(bd.data);
    cdao.setNome(bd.nome);
    cdao.setAtendido(bd.atendido);
    cdao.setStatus(bd.status);
    cdao.setSolucao(bd.solucao);

    txtId.setText(Integer.toString(cdao.getId()));
    txtProblema.setText(cdao.getProblema());
    txtData.setText(cdao.getData());
    txtNome.setText(cdao.getNome());
    txtAtendido.setText(cdao.getAtendido());
    txtSolucao.setText(cdao.getSolucao());
    txtStatus.setText(cdao.getStatus());
    bd.FechaConexao();
}                                            

[/code]

Bom dia!

Primeiro de tudo, use PreparedStatement ao invés de Statement quando tiver passagem de parâmetros.

Segundo, se a sua consulta retornar mais de um registro, você tem que recuperar o registro e adicionar em uma Coleção.
Da forma com que você está fazendo, você está sobrescrevendo os valores, só ficando os últimos valroes populados no campos.

Valeu

[quote=haamilton]Bom dia!

Primeiro de tudo, use PreparedStatement ao invés de Statement quando tiver passagem de parâmetros.

Segundo, se a sua consulta retornar mais de um registro, você tem que recuperar o registro e adicionar em uma Coleção.
Da forma com que você está fazendo, você está sobrescrevendo os valores, só ficando os últimos valroes populados no campos.

Valeu[/quote]

Legal
Eu pensei em usar array mais achei muito complicado fazer isso!
poderia me dar um exemplo!!!

while  (rs.next()) {  
id = rs.getInt("id");  
loja = rs.getString("loja");  
problem = rs.getString("problema");  
data = rs.getString("data");  
atendido = rs.getString("atendido");  
nome = rs.getString("nome");  
status = rs.getString("status");  
solucao = rs.getString("solucao");  
}

Em vez de vc fazer isso faça:

while  (rs.next()) {
CadastroDAO tmp = new CadastroDAO();
tmp.setId(bd.id);  
tmp.setProblema(bd.problem);  
tmp.setData(bd.data);  
tmp.setNome(bd.nome);  
tmp.setAtendido(bd.atendido);  
tmp.setStatus(bd.status);  
tmp.setSolucao(bd.solucao);

cadastro.add(tmp);
}

return cadastro;

e na função

retorno essa lista

então ficou assim

[code] public List Busca (String loj){
List cadastro = new ArrayList();
try {
String sql = “SELECT a.id,a.loja,a.nome,a.problema,a.atendido,a.data,a.status,a.solucao FROM atendimento a where loja = '”+loj+"’ order by id";
st = connection.createStatement(rs.TYPE_SCROLL_SENSITIVE,rs.CONCUR_READ_ONLY);
rs = st.executeQuery(sql);

            while (rs.next()) {
                CadastroDAO cdao = new CadastroDAO();
                cdao.setId(rs.getInt("id"));
                cdao.setLoja(rs.getString("loja"));
                cdao.setProblema(rs.getString("problema"));
                cdao.setData(rs.getString("data"));
                cdao.setAtendido(rs.getString("atendido"));
                cdao.setNome(rs.getString("nome"));
                cdao.setStatus(rs.getString("status"));
                cdao.setSolucao(rs.getString("solucao"));
                cadastro.add(cdao);
            }
        } catch(SQLException errSQL) {
            System.out.println(errSQL.getMessage());
            errSQL.printStackTrace();
        }
        catch(Exception errGeral) {
            System.out.println(errGeral.getMessage());
            errGeral.printStackTrace();
        }
    }

[/code]

esta dando erro aqui

Missing return statement

Olha eu ja vi esta forma de usar os select, e tambem ja usei, fazer primeiro a consulta e carregar num vector ( coleção) mas o problema esta no seguinte se tivermos uma consulta com 2 milhoes de dados, a memoria seria pouca, eu acho que uma forma mais inteligente que pelos vistos poucos usam , seria mesmo tentar ir buscar um a um na base de dados e mostrar, sem carregar na memoria da JVM, porque a linguaguem de programação( java) não serve para guardar dados isto é tarefa da base de dados, e fazendo desta forma ficara guardado por ai 2 milhoes de dados que a tabela tiver na memoria, e a actualização dos dados noutro cliente, não iria afectar os dados que ja estão carregados no vector( memoria da JVM).

[quote=sulito]Olha eu ja vi esta forma de usar os select, e tambem ja usei, fazer primeiro a consulta e carregar num vector ( coleção) mas o problema esta no seguinte se tivermos uma consulta com 2 milhoes de dados, a memoria seria pouca, eu acho que uma forma mais inteligente que pelos vistos poucos usam , seria mesmo tentar ir buscar um a um na base de dados e mostrar, sem carregar na memoria da JVM, porque a linguaguem de programação( java) não serve para guardar dados isto é tarefa da base de dados, e fazendo desta forma ficara guardado por ai 2 milhoes de dados que a tabela tiver na memoria, e a actualização dos dados noutro cliente, não iria afectar os dados que ja estão carregados no vector( memoria da JVM).

[/quote]

amigo não vo usar nem metade do banco
eu uso mysql e se tivesse tantos dados poderia usar um oracle ou sql server
é uma aplicação pra 2 pessoas…

ok, então na boa vai servir, pensei que era alguma coisa para a empresa

vai sim :smiley:
alguem pode me ajudar com este erro?

entao faltou o return do metodo
no caso tem q retornar um List :smiley: