Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Thiago Ray

[Resolvido] replaceAll

Recommended Posts

Falae!

Sou novato tanto no fórum quanto em programação. rs

 

Tenho um JForm com o objetivo de inserir dados numa tabela MySQl. Ele recebe dados de uma JTable.

Antes de chamar o método que vai inserir esses dados eu queria substituir o caracter ' que não é permitido no MySQL. Então fiz o seguinte:

 

String recebeNome = this.JTF_Nome.getText();
       String recebeTelefone = this.JTF_Telefone.getText();
       String recebeRG = this.JTF_RG.getText();
       String recebeCPF = this.JTF_CPF.getText();
       String recebeCidade = this.JTF_Cidade.getText();
       String recebeRua = this.JTF_Rua.getText();

       String nome = recebeNome.replaceAll("'","\'");
       String telefone = recebeTelefone.replaceAll("'","\'");
       String RG = recebeRG.replaceAll("'","\'");
       String CPF = recebeCPF.replaceAll("'","\'");
       String Cidade = recebeCidade.replaceAll("'","\'");
       String Rua = recebeRua.replaceAll("'","\'");


       controladorCliente cliente = new controladorCliente();
       cliente.adicionar(nome, telefone, RG, CPF, Cidade, Rua);

       dispose();

 

Porém, ele não substituiu. =/

Alguém poderia tirar essa dúvida???

Desde já, muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo trecho de codigo que voce apresentou, parece estar certo. Mas ao inves de ficar usando replace pra remover estes caracteres, por que voce nao usa PreparedStatement ao inves de Statement? Assim voce nao precisara de remover caracteres especiais. E para alem, depois pesquise por frameworks ORM. Pois usar JDBC diretamente nao e a melhor opcao.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom... como você falou, no código eu tentei usar o Prepared Statement... dessa forma:

 

public void insert(Cliente cliente){

       openDB();
       String query = "INSERT INTO dancarinos"
               + "(nome, telefone, rg, cpf, cidade, rua)"
               + " VALUES "
               + "('" + cliente.getNome() + "', '" + cliente.getTelefone() + "', '"
               + cliente.getRg() + "', '" + cliente.getCpf() + "', '"
               + cliente.getCidade() + "', '" + cliente.getRua() + "')";

       try {
           pstmt = con.prepareStatement(query);
           pstmt.execute();
           JOptionPane.showMessageDialog(null, "Gravado com sucesso!");
       } catch (Exception e) {
           JOptionPane.showMessageDialog(null, "Erro ao gravar!" + e);
       }

       closeDB();
   }

 

Bem, se não tiver caracter especial nenhum esse código funciona. Mas se tiver acento ou aspas simples ele não funciona. =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

É porque você não está usando PreparedStatement corretamente. B)

String query = "INSERT INTO dancarinos"
               + "(nome, telefone, rg, cpf, cidade, rua)"
               + " VALUES (?, ?, ?, ?, ?, ?)";

pstmt = con.prepareStatement(query);

pstmt.setObject(1, cliente.getNome());
pstmt.setObject(2, cliente.getTelefone());
//..

pstmt.execute();

 

Tenta de novo e veja se dá certo. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Po Virgil!

Realmente muito obrigado! Eu já tava ficando doido sem saber o que fazer! hahaha...

Hey, se não for abuso... poderia tirar mais uma dúvida?

Tava querendo montar uma query dinâmica. Por exemplo, no php eu posso armazenar os dados num array e depois desfragmentar esse array com o implode.

Mas no Java eu não tenho idéia de como fazer...

 

Bem, de qualquer forma...

Muito Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

De nada! :joia:

 

Bem, conheço pouquíssimo de PHP, pra não dizer nada. Não sei o que o implode faz. Pelo menos imagino que o implode deva quebrar uma massa de dados em várias partes seguindo um padrão. Em Java você tem algo semelhante, com o método split da classe String. Imagine que você tenha uma String cujo conteúdo é: "verde,amarelo,azul,branco".

 

String texto = "verde,amarelo,azul,branco";
String[] cores = texto.split(","); // Agora eu tenho uma matriz de String, sendo que em cada posição da matriz eu tenho uma cor.

 

No exemplo acima eu quebrei a String em 4 fragmentos, sendo que o padrão para realizar essa divisão foi o caracter "," (vírgula). O método split pede que eu informe a String que será o parâmetro de divisão. Que no caso acima foi uma vírgula. No entanto poderia ser qualquer outro tipo de caracter ou até expressão regular.

 

Agora que você tem a matriz de String, iterar seus valores fica muito mais fácil.

//..
for (String c : cores) {
  System.out.println(c);
}

 

Com Java, o uso deste tipo de recurso nem é tão comum uma vez que você aprende a trabalhar com coleções (Java Collections).

Compartilhar este post


Link para o post
Compartilhar em outros sites

hahaahahahah

 

Sei muito bem como é saber pouquíssimo...

 

<?php
$values = array('firstname'=>'firstname_value','lastname'=>'lastname_value');

sprintf('INSERT INTO %s (%s) VALUES ("%s")',
'table_name',
implode(', ', array_map('mysql_escape_string', array_keys($values))),
implode('", "',array_map('mysql_escape_string', $values)));

?>

 

Com esse código eu gerei

INSERT INTO table_name (firstname, lastname) VALUES ("firstname_value", "lastname_value")

Ou seja, ele junta elementos de um array com uma ligação.

 

O que eu tava pensando era algo dessa forma msmo. Assim eu posso ser mais flexível no montagem da query. Bem, a não ser que o java tenha algum método ou classe que seja melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra esse código que você postou tem um similar bem mais elegante em Java. Porém, exige conhecimento em Java Collections. Dentre as várias coleções da API Java Collections existe uma coleção chamada Map (interface), cuja implementação mais conhecida é o HashMap. Com ela você tem uma coleção de objetos ligados por palavras-chave. Eu recomendo que antes de trabalhar com mapas estudes a API Java Collections. Pois Map não é das mais simples. Ainda assim, deixarei um exemplo.

 

Map<String, Object> mapa = new HashMap<String, Object>();
mapa.put("nome", cliente.getNome());
mapa.put("telefone", cliente.getTelefone());

// recuperar o nome do cliente.
mapa.get("nome");

 

É bom estudar esta API. Você verá o quanto o Java pode auxiliá-lo com estrutura de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.