Pessoal, devo estar fazendo algo muito errado ou sei lá o que, pq minha consulta não funciona de jeito nenhum.
Vou colar meu código aqui e vejam se há algo errado pois minha consulta não retorna nada, mas existe dado na Base de dados.
[code]
public class ConsultaBoleto {
public void getDadosBoleto() {
String sql = "SELECT * FROM DOCUMENTO_FISCAL WHERE NRDOCUMENTO_FISCAL = ?";
try {
Connection conn = new ConnectionFactory().getConnection(); //Minha conexão está OK
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setInt(1, 3969); //O campo é númerico
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
System.out.println("---while--- ");
System.out.println(rs.getString(1));
}
stmt.close();
try {
conn.close();
} catch (SQLException ex) {
Logger.getLogger(ConsultaBoleto.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (SQLException ex) {
Logger.getLogger(ConsultaBoleto.class.getName()).log(Level.SEVERE, null, ex);
}
}
}[/code]
Deve ser uma coisa tosca que eu não estou enxergando, mas se eu tiro a cláusula do where, é retornado os dados, com o where, o ResultSet vem vazio e não dá erro nenhum.
Sim caras, o dado existe no banco e é do tipo numérico.
Não adianta nem mudar o índice pelo nome pois não chega nem a entrar no while. Qualquer consulta que tenha uma cláusula “where” tem dado isso. Não retorna nada. Tô achando isso muito estranho, sem explicação mesmo.
O banco é oracle e remoto, consigo estabelecer a conexão de boa e se eu dou só um “select * from tabela” ele me retorna os dados, mas quando tem where não traz nada.
Já tentei com Statement e com PreparedStatement ambos não retornam nada.
É de se assustar uma coisa dessas…
Edit: Já testei com outros drivers jdbc do oracle, já testei no Netbeans e no Eclipse. Só se for um erro meio “impossível” causado pelo Windows 7 que estou usando. A única coisa que veio na mina cabeça é se não é problema do Windows 7.
[quote=ctosin]Você já tentou executar essa query com o where diretamente no banco de dados, sem usar JDBC?
Abraço
[/quote]
Sim, copiei e colei, funciona numa boa. Só no java e especificamente quando tem where.
Por isso que tô começando a achar que é alguma incompatibilidade do windows. Não tem outra coisa…aparentemente está tudo certo.
[quote=Beibin]Está usando MySQL? Tive um problema parecido com MySQL antes, resolvi colocando os campos do banco entre crase (``).
String sql = "SELECT * FROM `DOCUMENTO_FISCAL` WHERE `NRDOCUMENTO_FISCAL` = ?";
Vou tentar aqui pra ver se soluciona, mas não é MySQL não é o Oracle 11g.
Edit: Não funcionou não. O estranho é que ele sabe que existe a coluna pois não dá erro e se eu mudo o nome dela ele diz que o nome da coluna é inválido. Porém ainda assim não retorna nada.
Já teste com dois drivers do oracle, windows 7 e XP SP3, Eclipse e Netbeans.
Não é preciso de crase usando PreparedStatement. Os nomes foram definidos com letra maiúscula mesmo no banco? (alguns bancos de dados são case-sensitive).
Tente executar somente o seguinte (sem filtragem) para ver se algum resultado é exibido:
String sql = "SELECT * FROM DOCUMENTO_FISCAL where 1=1";
Ele também traz resultados.
Agora se eu consulto assim:
String sql = "SELECT * FROM DOCUMENTO_FISCAL WHERE NRDOCUMENTO_FISCAL = ?";
Passando o valor para a “?”
Ele não traz nada.
Existe a coluna NRDOCUMENTO_FISCAL, ela possui dados e tem o dado que eu pesquiso. Tanto que se eu copio e colo esse SQL no PLSQL Developer, ele me retorna o resultado.
Já tinha tentado isso também amigo.
Um progresso que eu consegui fazer aqui foi o seguinte:
String sql = "SELECT * FROM SJBV.DOCUMENTO_FISCAL WHERE NRDOCUMENTO_FISCAL = (Select distinct MIN (NRDOCUMENTO_FISCAL) FROM SJBV.DOCUMENTO_FISCAL) ";
Essa consulta me retornou ok. Aí, peguei o valor do NRDOCUMENTO_FISCAL que ela retornou e usou na query original:
String sql = "SELECT * FROM DOCUMENTO_FISCAL WHERE NRDOCUMENTO_FISCAL = ?";
Também me retornou o resultSet ok.
Aí vcs irão me falar, “então tá resolvido, o valor passado para a consulta não existe no Banco de Dados, por isso o resultSet não trazia nada”.
Porém, o valor existe na tabela, isso que me deixa mais encucado ainda. Como pode um valor que existe na base não retornar nada??
Bom, pelo menos já deu pra concluir que o código está ok o buraco é mais embaixo, resta saber onde…
Bom pessoal.
Pra variar, como eu disse antes (não sei se nesse tópico), quanto mais complicado o problema, mais simples é a solução.
Resolvi dar um select count aqui na tabela e vi que os valores não batiam. Resolvi dar uma procurada no Oracle e vi que a base é replicada, existe o mesmo nome, tudo certinho numa base de testes e mesmo meu programa apontado para a base de produção, todos os dados estão vindo da bendita base de teste. :oops:
Por isso consultas que retornam no PLSQL não retornam no Java. O PL está apontando para um lugar e o java para outro.
Nomes iguais de tudo e eu perdi uns 3 dias quebrando a cabeça pra descobrir isso.
Mas valew pela experiência e espero que se alguém sofrer desse mesmo mal, possa aproveitar esse tópico como ajuda. Um problema simples que se transformou numa bola de neve.
Edit seu primeiro tópico e coloque a tag [RESOLVIDO].
Fiquei lendo atentamente todos os post’s para tentar dar uma dica e quando fui ver já estava resolvido =)
Edit seu primeiro tópico e coloque a tag [RESOLVIDO].
Fiquei lendo atentamente todos os post’s para tentar dar uma dica e quando fui ver já estava resolvido =)
Tchauzin![/quote]
Obrigado pela dica…nem tinha me lembrado disso…Pode deixar que vou editar.