Parametros sql em java

5 respostas
R

atualmente faço a inserção no banco de dados do mysql atraves de um metodo
assim

public void cadastra(String nome, String Senha) {

Statement stm = recuperaStm();//um outro metodo meu 


String comando = "insert into usuarios (nome,senha) values ('"+ nome+ "','" + senha + "')";
// note que nao uso parametros

stm.executeupdate(comando);

}

=====================
Porem assim é mto ruim na hora em que tenho que converter datas entre outros

nao tem como fazer igual ao delphi
por exemplo :

query.close;
  query.sql.clear;
  query.sql.add('insert into usuarios (nome,senha) values ( :n, :s )'); // note que eu uso o :para o parametro
  query.parameters.parambyname('n').value := nome ;  //==> varialvel
  query.parameters.parambyname('n').value := senha ; //==> varialvel
  query.execSql;

nao tem como passar por parametros tambem no java ???

5 Respostas

P

Tem, opa:

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

T

É claro que sim; você tem de usar um PreparedStatement.

http://java.sun.com/javase/6/docs/api/java/sql/PreparedStatement.html

O exemplo que aparece na documentação é de um “update” mas fazer um “insert” é exatamente a mesma coisa.

P

Faz assim..

private static final String INSERIR = "INSERT INTO USUARIOS (nome,senha) VALUES (?,?)"; 
Connection con = ConnectionFactory.getConnection();
	
	public void cadastra(String nome, String senha) throws SQLException{
		PreparedStatement stmt = con.prepareStatement(INSERIR);
		stmt.setString(1, nome);  //Onde 1 é a primeira interrogação da String INSERIR
		stmt.setString(2, senha); //e logicamente, 2 é a segunda..
		stmt.execute();
	}

Dá uma olhada aí no link que o pessoal mandou pra tirar qualquer dúvida..

D

Olá,
a utilização de concatenação de String, ao invés do PreparedStatement, para criar seus comandos sql é uma grave falha de segurança.
Utilizando-se concatenação de String vc sujeita a sua aplicação a um ataque com SQLInjection.

Para saber mais sobre SQLInjection e como o PreparedStatement o evita: [url]http://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java[/url]

Abs!

T

Existe também uma versão do PREPAREDSTATEMENT que recebe como parametro a String de SQL e um Array de Strings, funciona da mesma forma, mas evita o stmt.setString(1, nome); //Onde 1 é a primeira interrogação da String INSERIR stmt.setString(2, senha); //e logicamente, 2 é a segunda..
ou é necessário fazer essa parte na mesma?

Criado 16 de outubro de 2008
Ultima resposta 1 de fev. de 2011
Respostas 5
Participantes 6