Parametros sql em java

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 ???

Tem, opa:

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

É 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.

Faz assim…

[code]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();
}[/code]

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

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!

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?