Não estou conseguindo ver que erro de sintaxe está correndo nesta query :
String sqlDados = "SELECT P.PES_RG, P.PES_CPF FROM PESSOAS P WHERE P.PES_RG = ? AND P.PES_CPF = ? AND P.PES_COD_PESSOA="+codigoPessoa;
Está aparecendo a seguinte mensagem :
SELECT P.PES_RG, P.PES_CPF FROM PESSOAS P WHERE P.PES_RG = ? AND P.PES_CPF = ? AND P.PES_COD_PESSOA=6831
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘? AND P.PES_CPF = ? AND P.PES_COD_PESSOA=6831’ at line 1
Você ta usando PreparedStatement?
Acho que fica mais fácil se postar o método todo
M
maxcarvalho
Sim, exatamente isto.
M
markin1
tem como postar o método?
E se tá usando PreparedStatement pq ta concatenando uma variável diretamente na string sql?
skalinichenko
tem como postar o método?
E se tá usando PreparedStatement pq ta concatenando uma variável diretamente na string sql?
1!
M
maxcarvalho
Estou usando assim agora,
String sqlDados = “SELECT P.PES_RG, P.PES_CPF FROM PESSOAS P WHERE P.PES_RG = ? AND P.PES_CPF = ? AND P.PES_COD_PESSOA = ?”;
Mas o problema ainda persite.
[]'s
Max
M
markin1
Posta o método pra gente tentar ajudar
Vini_Fernandes
Uma dica para maxcarvalho : sempre que o erro de sintaxe persiste eu executo a instrição SQL na base de dados para me garantir que meu codigo esta correto! Creio que essa seja a hora de voce fazer isso!
Ate mais
M
maxcarvalho
Não estou sabendo testar a query na base de dados MySQL, pois não sei o que seria o equivalente em nível de banco de dados às ‘?’ que se utiliza para receber parâmetros no ambiente JDBC.
Continuo sem entender o que está acontecendo…
[]'s
Max
Vini_Fernandes
Cara, voce tem que colocar um valor ficticio no lugar de “?”, por exemplo, suponha que vc tenha a seguinte query:
SELECT U.NOME, U.IDADE, U.DATAINSCRICAO FROM USUARIO AS U WHERE U.IDADE = ? AND U.DATAINSCRICAO = ? ;
agora substituindo:
SELECT U.NOME, U.IDADE, U.DATAINSCRICAO FROM USUARIO AS U WHERE U.IDADE = 24 AND U.DATAINSCRICAO = '2009-02-01';
Espero ter ajudado
M
maxcarvalho
Segue o código da classe "quase toda".
Olhei o código e, pelo menos aparentemente, está tudo normal, senão vejamos :
publicclassQueryPessoa{...publicbooleanvalidaDados(StringminhaMatricula,StringumRg,StringumCpf){PreparedStatementpstmtDados;ResultSetrsDados;StringmeuRg;StringmeuCpf;intcodigoPessoa;....codigoPessoa=buscaPessoa(minhaMatricula);/* codigoPessoa é instanciado a partir da chamada a um outro método da mesma classe não mostrada aqui */if(codigoPessoa!=0){sqlDados="SELECT P.PES_RG, P.PES_CPF FROM PESSOAS P WHERE P.PES_RG = ? AND P.PES_CPF = ? AND P.PES_COD_PESSOA = ?";...try{...pstmtDados=conn.prepareStatement(sqlDados);pstmtDados.setString(1,umRg);pstmtDados.setString(2,umCpf);pstmtDados.setInt(3,codigoPessoa);rsDados=pstmtDados.executeQuery(sqlDados);/* erro é aqui */...rsDados.next();meuRg=rsDados.getString("P.PES_RG");meuCpf=rsDados.getString("P.PES_CPF");...if((meuRg.equals(umRg))&&(meuCpf.equals(umCpf))){System.out.println("Dados validados com sucesso !!!");returntrue;}else{System.out.println("Dados não conferem !!!");returnfalse;}}catch(SQLExceptionsqle){System.ouyt.println("Problema na execução do SQL");sqle.printStackTrace();returnfalse;}}}
Vini_Fernandes
Bom cara, acho que o problema esta resolvido! Veja o que tem que ser feito:
a linha que vc tem eh essa abaixo
rsDados = pstmtDados.executeQuery(sqlDados);
mas voce deveria ter
rsDados = pstmtDados.executeQuery();
Cara, nao sei como voce nao teve uma excecao em tempo de compilaçao!!
Ate mais
M
maxcarvalho
Vini,
Procedi a modificação por você sugerida, mas ainda não obtive êxito.
A semana que vem vou testar esta classe acessando uma base Oracle.
Tomara que dê certo. Depois vejo como fazer em MySQL.
Agradece,
Max Carvalho
M
maxcarvalho
Resolvi postar a versão mais completa e atualizada da classe QueryPessoa e da classe TestaQueryPessoa.
Classe QueryPessoa
packagepersistence;importjava.sql.*;importjavax.swing.JOptionPane;publicclassQueryPessoa{privateStringdriver="com.mysql.jdbc.Driver";privateStringurl="jdbc:mysql://127.0.0.1:3306/posgrad";privateStringusername="root";privateStringpassword="ufpb";privateConnectionconn;publicQueryPessoa(){conn=obtemConexao();}publicConnectionobtemConexao(){try{Class.forName(driver);JOptionPane.showMessageDialog(null,"Criando intância de conexão");conn=DriverManager.getConnection(url,username,password);JOptionPane.showMessageDialog(null,"Instância obtida : <"+conn+">");returnconn;}catch(ClassNotFoundExceptioncnfex){System.err.println("Falha ao carregar o driver JDBC.");cnfex.printStackTrace();conn=null;returnconn;}catch(SQLExceptionsqlex){System.err.println("Impossivel conectar");sqlex.printStackTrace();conn=null;returnconn;}}publicintbuscaPessoa(StringumaMatricula){PreparedStatementstmt;ResultSetrs;intcodigo;try{Stringsql="SELECT A.ALU_PES_COD_PESSOA FROM ALUNOS A WHERE A.ALU_MATRICULA=?";stmt=conn.prepareStatement(sql);if(stmt==null){System.out.println("Comando nulo");}else{System.out.println("Comando não nulo");}stmt.setString(1,umaMatricula);rs=stmt.executeQuery();if(rs==null){System.out.println("Resultset nulo");}else{System.out.println("Resultset não nulo");}rs.next();codigo=rs.getInt("ALU_PES_COD_PESSOA");System.out.println("Código da Pessoa : "+codigo);returncodigo;}catch(Exceptionex){System.out.println(ex.getMessage());System.out.println("Lancei exceção");ex.printStackTrace();return0;}}publicbooleanvalidaDados(StringminhaMatricula,StringumRg,StringumCpf){PreparedStatementpstmtDados;ResultSetrsDados;ResultSetMetaDatarsMetaData;StringmeuRg;StringmeuCpf;intcodigoPessoa;intnumColunas;codigoPessoa=buscaPessoa(minhaMatricula);if(codigoPessoa!=0){StringsqlDados="SELECT P.PES_RG, P.PES_CPF FROM PESSOAS P WHERE P.PES_RG = ? AND P.PES_CPF = ? AND P.PES_COD_PESSOA = ?";System.out.println(sqlDados);try{pstmtDados=conn.prepareStatement(sqlDados);pstmtDados.setString(1,umRg);pstmtDados.setString(2,umCpf);pstmtDados.setInt(3,codigoPessoa);rsDados=pstmtDados.executeQuery();rsMetaData=rsDados.getMetaData();numColunas=rsMetaData.getColumnCount();for(inti=1;i<=numColunas;i++){StringcolumnName=rsMetaData.getColumnName(i);System.out.println(columnName);}if(rsDados==null){System.out.println("Resultset nulo");}else{System.out.println("Resultset não-nulo");}rsDados.next();meuRg=rsDados.getString(1);System.out.print("RG : "+meuRg);meuCpf=rsDados.getString(2);if((meuRg.equals(umRg))&&(meuCpf.equals(umCpf))){System.out.println("Dados do aluno válidos. Recuperação efetuada com sucesso");returntrue;}else{System.out.println("Dados não conferem. Impossível recuperar.");returnfalse;}}catch(SQLExceptionsqle){sqle.printStackTrace();returnfalse;}}else{System.out.println("Aluno não encontrado !!!");returnfalse;}}}
Atualmente o erro que está aparecendo na seguinte linha:
...
meuRg = rsDados.getString(1);
...
da classe QueryPessoa. Segue, abaixo, o conteúdo do “Console” do Eclipese, logo que o erro acontece :
Matricula : 308100011
SQL : SELECT A.ALU_PES_COD_PESSOA FROM ALUNOS A WHERE A.ALU_MATRICULA=?
Comando não nulo
Resultset não nulo
Código da Pessoa : 6831
SELECT P.PES_RG, P.PES_CPF FROM PESSOAS P WHERE P.PES_RG = ? AND P.PES_CPF = ? AND P.PES_COD_PESSOA = ?
PES_RG
PES_CPF
Resultset não-nulo
java.sql.SQLException: Illegal operation on empty result set.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.ResultSet.checkRowPos(ResultSet.java:685)
at com.mysql.jdbc.ResultSet.getNativeString(ResultSet.java:4341)
at com.mysql.jdbc.ResultSet.getStringInternal(ResultSet.java:5633)
Impossível Recuperar Senha
at com.mysql.jdbc.ResultSet.getString(ResultSet.java:5431)
at persistence.QueryPessoa.validaDados(QueryPessoa.java:161)
at beans.TestaPessoa.main(TestaPessoa.java:36)
Como “java.sql.SQLException: Illegal operation on empty result set.” ?
Se fiz um if que me retornou que o ResultSet é não nulo ?