teoricamente falando, qual a diferença ?
seria apenas q a 1ª enxuga o sql e o código não precisa ser recompilado?
thanks !!!
A diferença é que em preparedstatement sua query fica pré compilada.
Portanto tende a ser mais rápida, principalmente quando tem um número muito grande de queries iguais…
Existem até sistemas que fazem pool de preparedstatements, por esse motivo…
Pesquisando, gostei desta thread aqui:
como o PreparedStatements é pré-compilado, ele é seguro contra sql-injections.
O material que o artigo cita (um livro sobre Oracle + JDBC) usa o driver para a versão 7 do Oracle.
Desde aquele tempo, o desempenho tanto do Oracle quanto do driver JDBC devem ter melhorado sensivelmente.
De qualquer maneira, sempre recomendamos usar PreparedStatements devido aos seguintes benefícios:
- Você não precisa se preocupar se o formato para datas é MM/DD/AAAA ou AAAA-MM-DD
- Você não precisa se preocupar se o valor de doze mil, trezentos e quarenta e cinco reais e sessenta e sete centavos é "12.345,67" ou "12,345.67"
- Você não precisa se preocupar em duplicar as aspas (“José Sant’Anna” -> ‘José Sant’‘Anna’ em SQL)
- Você não precisa se preocupar muito com SQL Injection (exceto naqueles poucos bancos de dados cujo driver JDBC foram mal escritos e criam uma String SQL a partir do Prepared Statement, em vez de mandá-los em binário. Um desses bancos é o MySQL - os drivers mais antigos têm muitos bugs.)
- Em alguns bancos (como o SQL Server e o Oracle) PreparedStatements podem ser até mais rápidos, dependendo da quantidade de vezes que se reusa o mesmo PreparedStatement.