Pergunta

Na sequência de uma das minhas perguntas anteriores para fazer com método de design Foi-me sugerido implementado meu consultas SQL como uma consulta parametrizada como oposição a uma simples seqüência de caracteres.

Eu nunca usei consultas parametrizadas antes, então eu decidi começar com algo simples, faça o seguinte Selecione instrução:

String select = "SELECT * FROM ? ";

PreparedStatement ps = connection.prepareStatement(select);
ps.setString(1, "person");

Isso me dá o seguinte erro: "[SQLITE_ERROR] erro de SQL ou falta de banco de dados (perto de "?":erro de sintaxe)"

Eu tentei uma versão modificada que tem critérios adicionais;

String select = "SELECT id FROM person WHERE name = ? ";

PreparedStatement ps = connection.prepareStatement(select);
ps.setString(1, "Yui");

Esta versão funciona bem, no meu primeiro exemplo, eu estou faltando o ponto de consultas parametrizadas ou sou eu que construí-las incorretamente?

Obrigado!

Foi útil?

Solução

Simplesmente coloque, SQL liga não é possível vincular tabelas, apenas a cláusula where valores.Há alguns sob o capô razões técnicas para isso "compilar" instruções SQL preparadas.Em geral, as consultas parametrizadas foi projetado para tornar o SQL mais segura, impedindo que a injeção de SQL e tinha um lado de benefício de fazer consultas mais "modular" bem, mas não ao ponto de ser capaz de definir dinamicamente o nome de uma tabela (uma vez que é assumido que você já sabe o que a tabela vai ser).

Outras dicas

Se você deseja que todas as linhas da tabela PESSOA, aqui está o que você deve fazer:

String select = "SELECT * FROM person";

PreparedStatement ps = connection.prepareStatement(select);

Variável de ligação não se vincular dinamicamente a tabela de nomes como os outros mencionados acima.Se você tem o nome da tabela vindo para o seu método como uma variável, você pode construir toda a consulta, conforme abaixo:

String select = "SELECT * FROM " + varTableName;
PreparedStatement ps = connection.prepareStatement(select);

Consultas parametrizadas são para consultar nomes de campo - e não o nome da tabela!

Instruções preparadas ainda SQL e precisa ser construído com a cláusula where apropriada;i.e.onde x = y.Uma das suas vantagens é que eles são analisados pelo SGBDR quando visto pela primeira vez, ao invés de toda vez que eles são enviados, o que acelera execuções subseqüentes do mesmo consulta com diferentes vincular valores.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top