Statement x PreparedStatement

Boa Tarde,
Bem eu comecei a aprender Java Sozinoi, lendo apostilas enfim, entretanto, para me conectar aos banco de dados, eu utilizo o Statement, pois esse foi o metodo que eu aprendi, No entanto algumas pessoas me orientaram para trabalhar com o PreparedStatement, porem eu desconheço esse modo de trabalhar com o BD, tentei procurar um material na internet referente a este conteudo porem nao encontrei nada relevante, por isso gostaria de saber se algum de vcs tem um apostila ou algo do genero, que possa me ajudar a trabalhar com o PreparedStatement.

Vlw aehh Galera

Olá, seja bem vindo ao PJ!

O uso mais comum do PreparedStatement é para evitar SQLInjection. Imagine uma query dinâmica montada dessa forma:

String sql = "select * from user where username='" + username +"' and password='" + password + "'";

Agora imagine que o usuário entre com o seguinte valor:

admin' OR '1'='1

O SQL gerado será:

select * from user where username='admin' OR '1'='1' and password=' '

Permitindo assim o acesso indevido.

Fique atento a um detalhe. Mesmo usando PreparedStatement você pode ter SQLInjection. Se você usar PreparedStatement e continuar concatenando os valores na String quee forma o SQL, o problema pode persistir. Sempre use assim:

String selectStatement = "SELECT * FROM User WHERE userId = ? "; PreparedStatement prepStmt = con.prepareStatement(selectStatement); prepStmt.setString(1, userId); ResultSet rs = prepStmt.executeQuery();

http://www.guj.com.br/java.tutorial.artigo.115.1.guj

Além do mais o PreparedStatetement facilita muito e enxuta bem o código sem termos que escrever as querys diretamente nele.

No livro Deitel Java Como Programar 6ºE tem um Capitulo dedicado a acesso a dados.

E uma das principais caracteristicas do PreparedStatement é que ele pode ser compilado pelo banco de dados para multiplas execuções, o que te dá um ganho de performance.

http://java.sun.com/j2se/1.5.0/docs/api/java/sql/PreparedStatement.html