Olá a todos.
Estou com um problema no PreparedStatement que não consigo resolver.
Tenho esta classe em java, RecuperarDadosBD, e ela esta me trazendo um erro no SQL, mas não sei o por que desse erro.
Tentei várias coisas.
Se eu deixo sem ‘?’ ele funciona normalmente.
Segue abaixo os codes da classe e do main.
Classe RecuperarDadosBD
publicclassRecuperarDadosBD{publicstaticIntegerrecuperaID(Stringid,Stringbanco){Connectionconexao=newConnectionFactory().getConnection();Stringsql="SELECT max(?) MAX FROM ?";try{PreparedStatementstmt=conexao.prepareStatement(sql);stmt.setString(1,id);stmt.setString(2,banco);ResultSetrs=stmt.executeQuery();rs.first();returnrs.getInt("MAX")+1;}catch(SQLExceptione){thrownewRuntimeException(e);}}}
Olá a todos.
Estou com um problema no PreparedStatement que não consigo resolver.
Tenho esta classe em java, RecuperarDadosBD, e ela esta me trazendo um erro no SQL, mas não sei o por que desse erro.
Tentei várias coisas.
Se eu deixo sem ‘?’ ele funciona normalmente.
Segue abaixo os codes da classe e do main.
Classe RecuperarDadosBD
publicclassRecuperarDadosBD{publicstaticIntegerrecuperaID(Stringid,Stringbanco){Connectionconexao=newConnectionFactory().getConnection();Stringsql="SELECT max(?) MAX FROM ?";try{PreparedStatementstmt=conexao.prepareStatement(sql);stmt.setString(1,id);stmt.setString(2,banco);ResultSetrs=stmt.executeQuery();rs.first();returnrs.getInt("MAX")+1;}catch(SQLExceptione){thrownewRuntimeException(e);}}}
Em verdade te digo que com o prepared statement você não consegue passar o nome da tabela como parâmetro não. Se tiveres que executar teu select em várias tabelas e fazer esta troca dinamicamente, terás de buscar outra forma. Se a lista de tabelas for previamente conhecida e fixa, você deverás deixar preparada um comando sql para cada e selecionar qual executar dependendo da tabela desejada - esta é só uma de algumas abordagens…
edu_fernandes
Humm…
Entendii
Entao não tenho essa possibilidade com o Prepared.
Obrigado pela ajuda.
Abraços.
ibira
Não seria:
String sql = “SELECT max(?) as MAX FROM ?” ;
ao inves de
String sql = “SELECT max(?) MAX FROM ?” ;
edu_fernandes
O Ademilton tem razão.
Eu tentei aqui de todas as formas e não tem como.
Pelo seguinte.
Executei o seguinte SQL no banco
SELECT max(id_recursos) MAX FROM ‘recursos’
E ele não funciona. Não posso ter ‘’(aspas simples) na declaração do banco.
Pelo que entendi do Prepared ele executa a query da seguinte forma.
SELECT max(?) MAX FROM ? = SELECT max(‘id_recurso’) MAX FROM ‘recursos’.
Por isso dá o erro.
De qualquer forma obrigado.
E respondendo sua pergunta não precisa do AS.
Se quiser testar verá que é a mesma coisa.
Abraço e obrigado pela resposta.