2015-08-02 19 views
6

Stavo attraversando le differenze tra Statement e PreparedStatement in JDBC e ho visto così tanti vantaggi here e here con PreparedStatement in confronto con Statement.Ci sono degli svantaggi usando Preparedstatement rispetto a Statement

Alcuni dei miei colleghi hanno chiesto perché abbiamo ancora bisogno di una dichiarazione e perché non è deprecato guardando i vantaggi di PreparedStatement.

Quindi c'è qualche ragione per cui abbiamo ancora l'istruzione nell'API JDBC?

+3

query senza parametri che devono essere eseguiti quelli –

+3

'PreparedStatement' è un'implementazione dell'interfaccia' Statement'. La tua domanda non è chiara ... – alfasin

+1

Preferisco sempre utilizzare le istruzioni preparate a causa dei seguenti vantaggi rispetto alla dichiarazione. 1) PreparedStatement ci aiuta a prevenire attacchi di SQL injection perché sfugge automaticamente ai caratteri speciali. 2) PreparedStatement ci consente di eseguire query dinamiche con gli input dei parametri. 3) PreparedStatement fornisce diversi tipi di metodi setter per impostare i parametri di input per la query. 4) PreparedStatement è più veloce di Statement. 5) PreparedStatement ci aiuta nella scrittura di codice orientato agli oggetti con metodi setter 6) PreparedStatement restituisce FORWARD_ONLY ResultSet, –

risposta

2

PreparedStatement viene utilizzato per gestire le query SQL dinamiche, dove Statement viene utilizzato per gestire query SQL statiche.

0

Quindi c'è qualche ragione per cui abbiamo ancora la dichiarazione in API JDBC?

Sì perché è nell'API client-server SQL. Se le istruzioni non preparate dovessero essere rimosse, una caratteristica di SQL sarebbe mancante da JDBC.

Come accennato in altre risposte, PreparedStatement non ha alcun vantaggio se non ci sono parametri dinamici. Per questi casi è leggermente più conciso usare una dichiarazione non preparata.

Completamente insensibile a tali questioni è il fatto che PreparedStatement è un Suberinterface di Statement e quindi quest'ultimo non può essere rimosso senza ridisegnare l'API. Questo però ha più a che fare con l'API Java e non con SQL.