Dúvida sobre PreparedStatement [RESOLVIDO]

7 respostas
xcah

Olá!

Bom, estou com uma dúvida meio besta (ou não), e não estou conseguindo achar na internet algo que realmente esclareça, então não sei bem onde perguntar ou procurar mais =s
é simples, eu comecei a usar PreparedStatement a partir desse artigo http://www.guj.com.br/articles/115 pois queria tirar o SQL do código, então joguei o SQL para um XML para pegar esses valores e jogar prum PreparedStatement… só que agora não sei se o PreparedStatement aceita algo como:

SELECT ? FROM ?

aí faria nele

pstmt.setString(1, "id, nome"); pstmt.setString(2, "pessoa");

ou teria que usar algum outro “set” do PreparedStatement? como pstmt.setObject, algo assim?

ou ele apenas aceitaria

SELECT id, nome FROM pessoa WHERE id = ?

?

Se ele só fosse pro valor do campo, há alguma outra forma de eu fazer que nem no SELECT ? FROM ? ?

Agradeço se alguém puder esclarecer isso… ^-^

7 Respostas

drsmachado

Você terá de usar algum recurso para ler o XML, pegar os valores em cada nó e aí fazer o preparedStatement.

xcah

Eu consigo ler o XML normalmente… o que estou com dúvida é se eu posso atribuir ao coringa “?” um nome de tabela, coluna etc, e funcionar normalmente, ou se só daria certo com atribuição de um valor de algo…

rodrigo.bossini

Dá uma olhada aqui. Acho que na primeira página vc já mata a dúvida.

pmlm

Não.

jamirdeajr

Coringas para montar o SQL como já foi dito não funciona mesmo, e você não teria muita vantagem com isso.
O preparedStatement facilita o trabalho do gerenciador de banco de dados fazendo com que ele não tenha que refazer o plano de execução a cada chamada, quando o que varia são só os valores dos parâmetros, assim ele reaproveita o plano anterior e executa mais rápido (além da vantagem de inibir a injeção de código malicioso, tipo o cara colocar um ‘; delete from usuarios’ no campo logon para que teu código execute o comando).

Neste caso para ter o mesmo efeito basta montar o SQL dinamicamente, usando o que você leu do seu XML e se for o caso continuar usando coringas somente para valores atribuídos aos campos.
Algo bem simples:

String sql = "SELECT "+camposDoXML+ " FROM "+tabelaDoXML + " WHERE "+condicaoDoXML + " = ? "; ... pstmt.setString(1, "valor...");

xcah

Ah ok, entendi… obrigada! :slight_smile:

romulo_wan

hum…

Criado 8 de junho de 2011
Ultima resposta 14 de jun. de 2011
Respostas 7
Participantes 6