Erro com prepareStatement

9 respostas
rocha

Tenho esse trecho de código:

StringBuffer sb = new StringBuffer();
        try {   
            
            sb.append("SELECT TB_SP.CEP, TB_SP.UF, TB_SP.LOGRADOURO, TB_CIDADE.CIDADE, TB_BAIRRO.BAIRRO");
            sb.append("FROM TB_SP, TB_CIDADE, TB_BAIRRO WHERE TB_SP.CEP = '08550510'");
            sb.append("AND TB_CIDADE.CHAVELOC = TB_SP.ID_CIDADE AND TB_SP.ID_BAIRRO = TB_BAIRRO.CHAVEBAI ");
            sb.append("AND TB_BAIRRO.CHVLOCBAI = TB_CIDADE.CHAVELOC");
            
            String sql = sb.toString();
                       
            ps = conexao.prepareStatement(sql );
            ps.setString(1, cep);
            rs = ps.executeQuery();

e é me apresentado o seguinte erro:

org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, char 114
WHERE
        at org.firebirdsql.jdbc.AbstractPreparedStatement.<init>(AbstractPreparedStatement.java:91)
        at org.firebirdsql.jdbc.FBPreparedStatement.<init>(FBPreparedStatement.java:34)
        at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:682)
        at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:232)

9 Respostas

foia

cadê o “?” na sql ??

rocha

troquei o 08550510 pelo ?

jgbt

Rocha,
da uma olhada nas dosc do PreparedStatement.
vc não tem nenhum parametro dinamico na query, por isso não vai funcionar.

[]'s

keller

Tente assim…

StringBuffer sb = new StringBuffer();
         try {   
             
             sb.append("SELECT TB_SP.CEP, TB_SP.UF, TB_SP.LOGRADOURO, TB_CIDADE.CIDADE, TB_BAIRRO.BAIRRO");
             sb.append("FROM TB_SP, TB_CIDADE, TB_BAIRRO WHERE TB_SP.CEP = '08550510'");
             sb.append("AND TB_CIDADE.CHAVELOC = TB_SP.ID_CIDADE AND TB_SP.ID_BAIRRO = TB_BAIRRO.CHAVEBAI ");
             sb.append("AND TB_BAIRRO.CHVLOCBAI = TB_CIDADE.CHAVELOC");
             
             System.out.println("Minha query");                  
	     System.out.println(sb.toString());
             System.out.println();

	     ps = conexao.prepareStatement( sb.toString() );
             ps.setString(1, cep);
             rs = ps.executeQuery();
	    }

Aparecerá no console seu SQL assim você podera saber o que
há de errado na sintaxe, querendo uma ajuda cole o trace ae…

gui. :wink:

rocha

gui:
Tente assim…

Aparecerá no console seu SQL assim você podera saber o que
há de errado na sintaxe, querendo uma ajuda cole o trace ae…

gui. :wink:

na sintaxe do sql não é pois já executei ela direto no conselo do bd e rolou

rocha

jgbt:
Rocha,
da uma olhada nas dosc do PreparedStatement.
vc não tem nenhum parametro dinamico na query, por isso não vai funcionar.

[]'s

Tentei assim tb:

try {

sb.append("SELECT TB_SP.CEP, TB_SP.UF, TB_SP.LOGRADOURO, TB_CIDADE.CIDADE, TB_BAIRRO.BAIRRO");
        sb.append("FROM TB_SP, TB_CIDADE, TB_BAIRRO WHERE TB_SP.CEP = ?");
        sb.append("AND TB_CIDADE.CHAVELOC = TB_SP.ID_CIDADE AND TB_SP.ID_BAIRRO = TB_BAIRRO.CHAVEBAI ");
        sb.append("AND TB_BAIRRO.CHVLOCBAI = TB_CIDADE.CHAVELOC");
        
        String sql = sb.toString();
                   
        ps = conexao.prepareStatement(sql);
        ps.setString(1, cep);
        rs = ps.executeQuery();</blockquote>
foia

tá faltando uns espaços no final de cada sb.append. siga o conselho do gui e vc vai se dar bem. :mrgreen:

rocha

deu certo valeu!!!

T

Essa história do espaço… Já queimou muita gente boa.

No meio do século passado, quando Fortran era novidade e os cientistas discutiam se era melhor escrever em Fortran ou Assembly, podia-se escrever:

DOI=1,10

para representar

DO I = 1, 10

(ou seja, você podia omitir os espaços)

Isso em Java equivale mais ou menos a “for (int i = 1; i <= 10; ++i)

Hoje em dia você não tem mais essa “comodidade” de omitir os espaços.

Criado 15 de junho de 2005
Ultima resposta 15 de jun. de 2005
Respostas 9
Participantes 5