2013-03-04 11 views
6

Mam tabelę MySql person_details, która zawiera p_id i p_name. Teraz, jeśli chcę wstawić rekord gdzie p_name zawiera apostrof ', bym ją wykonać tę drodze,Jak uniknąć pojedynczego cudzysłowu w literale ciągu używając MySQL z Java

insert into person_details values (1, 'D\'souza');

Teraz próbuję wykonać to samo za pomocą kodu java ten sposób -

insert into person_details values (1, 'D\\\'souza');

i dostaję MySQLSyntaxErrorException.

Coś nie tak?

+0

użyć urlencode() funkcji –

Odpowiedz

11

Aby odpowiedzieć na to pytanie bezpośrednio, podwójne cudzysłowy.

insert into person_details values (1, 'D''souza'); 

Ale raczej sparametryzowałem zapytanie za pomocą PreparedStatement.

Oto Plusy:

  • unikanie z SQL Injection
  • nie trzeba używać apostrofów.

przykład,

String str = "insert into person_details values (?, ?)"; 
query = con.prepareStatement(str); 
query.setInt(1, 1); 
query.setString(2, "D'souza"); 
query.executeUpdate(); 
+0

+1 Przygotowane instrukcje są tutaj, jeśli dane pochodzą z innych źródeł. –

+0

Po prostu świetny panie. Próbowałem również wszystkie kombinacje \\\ ', \\', \ 'Wszystko zwróciło mi błąd składni SQL. To zadziałało –

4

W MySQL, należy użyć '' dla pojedynczego ' wewnątrz łańcucha:

insert into person_details values (1, 'D''souza'); 

Link to docs

Ale to tylko, gdy jesteś dostarczenie danych dosłownie, takie jak skrypt SQL do wstępnej - wypełnij tabelę danymi, które kontrolujesz, itp. Jeśli odbierasz ten ciąg z zewnętrznego źródła (na przykład końcowego użytkownika lub zewnętrznego systemu), prawdopodobnie nie będziesz pisać dosłownie, ale raczej użyjesz zmienna łańcuchowa. W takim przypadku chcesz użyć przygotowanych instrukcji jako JW. describes in his answer. Dlaczego: http://xkcd.com/327/

2

Można również użyć "

insert into person_details values (1, "D'souza"); 
+1

O ile, oczywiście, nie używasz [cytatów ANSI] (http://dev.mysql.com/doc/refman/5.6/en/server-sql-mode.html#sqlmode_ansi_quotes). –

Powiązane problemy