Boa Tarde pessoal,
Meu código é o seguinte:
try{
String sql = "SELECT DISTINCT t.codParticipante , p.nomeParticipante, t.animal, t.codPartida "
+ "FROM tempo as t INNER JOIN participante as p ON t.codParticipante=p.codParticipante "
+ "WHERE codPartida LIKE (?)";
PreparedStatement prep = connect.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
prep.setInt(1, codigo);
ResultSet rs = prep.executeQuery();
return rs;
} catch (SQLException e){
System.out.println("Erro: "+e);
return null;
}
Ok até aí certo, tenho 11 registros nessa tabela que satisfazem a cláusula LIKE, porém distintos mesmo, são apenas 4 registro, mas quando dou um rs.last() e um rs.getRow() para ver quantos registros ele me trouxe me volta 11, alguém sabe o que pode estar acontecendo?
O banco de dados(se é que podemos chamar assim…) é o Access 2003(estou usando ele pois o projeto é pequeno, e não quero que o cliente instale um banco de dados na máquina dele…)
Ah testei essa query no SQL Lite e funcionou normalmente nesse banco de dados.
Obrigado desde já.
Não entendi, se você rodar essa SQL fora do Java, ele volta 4 ou 11 registros?
Tenta tirar o ResultSet.CONCUR_UPDATABLE (distinct com cursor atualizável não parece correto, deve ser o problema) e também o ResultSet.TYPE_SCROLL_SENSITIVE (use esse só se precisar ‘voltar’ o cursor)
PreparedStatement prep = connect.prepareStatement(sql);
Opa Jamir tudo bom?
Então preciso que esse ResultSet seja navegável, preciso sim voltar o cursor.
eu tentei tirar o ResultSet.CONCUR_UPDATABLE só que aí me dá o seguinte erro:
Exception in thread “AWT-EventQueue-0” java.lang.UnsupportedOperationException
at sun.jdbc.odbc.JdbcOdbcConnection.prepareStatement(JdbcOdbcConnection.java:1750)
Teria como fazer um ResultSet navegável de alguma outra forma?
Tudo bem Eduardo,
Então, essa exception pelo que sei acontece se você estiver tentando persistir o registro, o que não seria permitido já que o hibernate não vai saber qual registro exatamente você precisa atualizar.
No seu exemplo são 11 registros ao todo, sendo 4 distintos, então tem mais de um com as mesmas características.
Acredito que se você precisa ir e voltar cursor não teria problema incluir ResultSet.TYPE_SCROLL_SENSITIVE, só comentei porque sempre é mais ‘leve’ usar modo unidirecional.
Boa sorte!
[quote=Eduardo Rebou?s]Boa Tarde pessoal,
Meu código é o seguinte:
try{
String sql = "SELECT DISTINCT t.codParticipante , p.nomeParticipante, t.animal, t.codPartida "
+ "FROM tempo as t INNER JOIN participante as p ON t.codParticipante=p.codParticipante "
+ "WHERE codPartida LIKE (?)";
PreparedStatement prep = connect.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
prep.setInt(1, codigo);
ResultSet rs = prep.executeQuery();
return rs;
} catch (SQLException e){
System.out.println("Erro: "+e);
return null;
}
Ok até aí certo, tenho 11 registros nessa tabela que satisfazem a cláusula LIKE, porém distintos mesmo, são apenas 4 registro, mas quando dou um rs.last() e um rs.getRow() para ver quantos registros ele me trouxe me volta 11, alguém sabe o que pode estar acontecendo?
O banco de dados(se é que podemos chamar assim…) é o Access 2003(estou usando ele pois o projeto é pequeno, e não quero que o cliente instale um banco de dados na máquina dele…)
Ah testei essa query no SQL Lite e funcionou normalmente nesse banco de dados.
Obrigado desde já.[/quote]
E ai já foi resolvido? Já verificou se seu problema pode ser o INNER join?
Não trate Access como banco de dados amigo, haaaaa muita diferença
Você diz que nao quer que o cliente instale um banco de dados, hje existem varios BANCO DE DADOS free, como mysql, oracle 10G
O programa pode ser pequeno porém precisa levar em consideração as informações quantos registros ele ira fazer por mês,por ano
manutenção desses registros.
Conselho instale um BANCO DE DADOS irá ver que seu sistema ira melhorar e muito
pode ser o mysql, postgree ou o oracle 10G seu cliente nao irá pagar nada e vc mata o “x” da questao com seu select!