Você não pode setar nomes de colunas em um PreparedStatement. Você só pode setar valores.
(A razão é que um PreparedStatement na verdade é uma forma de dar uma instrução ao banco de dados para otimizar a query SQL, passando apenas os novos valores de parâmetros e possibilitando a pré-compilação.
Entretanto, pré-compilação, em qualquer banco SQL, supõe que os nomes das colunas sejam fixos, e você só altere valores. )
No seu caso você teria de montar a string SQL com os nomes das colunas desejadas.
[quote=thingol]Você não pode setar nomes de colunas em um PreparedStatement. Você só pode setar valores.
(A razão é que um PreparedStatement na verdade é uma forma de dar uma instrução ao banco de dados para otimizar a query SQL, passando apenas os novos valores de parâmetros e possibilitando a pré-compilação.
Entretanto, pré-compilação, em qualquer banco SQL, supõe que os nomes das colunas sejam fixos, e você só altere valores. )
No seu caso você teria de montar a string SQL com os nomes das colunas desejadas. [/quote]
Qual seria a solução para eu ter esta funcionalidade de ordenar de acordo com o campo desejado ??
sql = cnct.conn.prepareStatement
("SELECT id, vencimento, usuario FROM tabela ORDER BY " + parametro);
É claro que você provavelmente vai usar uma cláusula WHERE para não puxar dados demais do banco, não?[/quote]
Sim, usarei Where, este foi só pra exemplificar.
Mas se eu fizer assim vou perder a otimização do SQL ficar pré compilado após executado pela primeira vez ?? Isto acarretará em algum problema, tipo perca de desempenho ??
“Perca” é o nome de um peixe
De qualquer maneira, depende um pouco de seu banco.
Muitos bancos costumam ter internamente um pool de expressões SQL pré-compiladas, então se você solicitar um relatório por vencimento e um pouco depois um outro relatório por vencimento, então ele já terá a expressão pré-compilada.