Problema com Java & SQL

9 respostas
F

Pessoal, estou criando uma aplicaçãozinho para questões de aprendizado.
Uma das minhas classes é a Aluno. Ela então possue sua classe de persistência, que eh a classe AlunoDAO. Na classe AlunoDAO então possuo o método que estou sofrendo para terminá-lo. Dêem uma olhada no código:

public static void main(String args[]){
        System.out.println("TEste");
        AlunoDAO aluDAO = new AlunoDAO();
        aluDAO.getAlunos("", "Felipe", "");
       
    }
    
    public ArrayList getAlunos(String curso, String nome, String ra){
    String sql = "select * from aluno " +
    "where cod_curso like '?%' " +
    "and nome like '?%' " +
    "and ra like '?%'";
    CursoDAO cDAO = new CursoDAO();
    ArrayList array_alunos = new ArrayList();
    Aluno aluno = null;
    try{
    PreparedStatement stmt = con.prepareStatement(sql);
    stmt.setString(1, curso);
    stmt.setString(2, nome);
    stmt.setString(3, ra);
    ResultSet rs = stmt.executeQuery();
    
//Não entra nesse while. Gostaria de saber porque. Obviamente porque não possue nenhuma linha no ResultSet. Mas porque será ?
//uma vez que no meu banco possuo um registro com nome Felipe.

while(rs.next()){
aluno = new Aluno();
aluno.setCod_aluno(rs.getInt("cod_aluno"));
aluno.setNome(rs.getString("nome"));
aluno.setRa(rs.getString("ra"));
aluno.setCurso(cDAO.getCursobyCodigo(rs.getInt("curso")));
System.out.println(aluno.getNome());
array_alunos.add(aluno);
        
    }
    }catch(SQLException ex){}
    
    return array_alunos;
    }

9 Respostas

nandobgi

O problema está na sua consulta olhe com cuidado:

String sql = "select * from aluno " +  
     "where cod_curso like '?%' " +  
     "and nome like '?%' " +  
     "and ra like '?%'";

[ ]'s

M

Você já tentou rodar esse sql dirento no banco? Ou seja, sem usar a aplicação.

F

nandobgi:
O problema está na sua consulta olhe com cuidado:

String sql = "select * from aluno " +  
     "where cod_curso like '?%' " +  
     "and nome like '?%' " +  
     "and ra like '?%'";

[ ]'s

Ueh, mas aonde que está errada a consulta ?

F

maikel.souza:
Você já tentou rodar esse sql dirento no banco? Ou seja, sem usar a aplicação.

Sim, rodou bonitinho.

E agora fiz sem usar o preparedStatement, fui apenas concatenando daih deu certo. Mas gostaria de usar o prepared.

F

Pessoal, que coisa mais estranha. Coloquei no block catch a exceção.message(). Então apareceu a seguinte mensagem: *ORA-01006: a variável de ligação não existe.

Mas detalhe, isso somente acontece quando uso a classe preparedStatement, quando uso a Statement dá certo.

Alguém sabe oque se passa ?

mduques

Tente fazer assim:

String sql = "select * from aluno " +
"where cod_curso like ? " +
"and nome like ? " +
“and ra like ?”;

stmt.setString(1, curso.concat("%"));   
stmt.setString(2, nome.concat("%"));   
stmt.setString(3, ra.concat("%"));

Tenha cuidado se os parametros forem nulos, senão o velho NullPointerEx

F

mduques:
Tente fazer assim:

String sql = "select * from aluno " +
"where cod_curso like ? " +
"and nome like ? " +
“and ra like ?”;

stmt.setString(1, curso.concat("%"));   
stmt.setString(2, nome.concat("%"));   
stmt.setString(3, ra.concat("%"));

Tenha cuidado se os parametros forem nulos, senão o velho NullPointerEx

Hummm certo, pode deixar. E sem sucesso mesmo usando concat. =[
Continuou retornando ORA-01006: a variável de ligação não existe
Mais alguma idéia do que possa ser ? rsrs

mduques

Vc tirou as aspas simples das interrogações?

F

Não, deixei com aspas simples mesmo. Mas encontrei o erro. Estava na passagem de parametros, onde era para passar o código do curso eu estava passando o nome. Falta de ateñção minha mesmo…

grande abraço, vlw pela ajuda…

Criado 30 de junho de 2008
Ultima resposta 30 de jun. de 2008
Respostas 9
Participantes 4