2013-03-04 70 views
6

我有一个MySql表person_details其中包含p_idp_name。现在,如果我想插入其中p_name包含一个单引号'的记录,我会执行它这个way-如何使用MySQL从Java字符串文字中逃避单引号

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

现在,我试图通过Java代码这种方式来执行相同 -

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

,我也得到MySQLSyntaxErrorException。

有什么问题吗?

+0

使用进行urlencode()函数 – 2013-03-04 09:49:45

回答

11

直接回答你的问题,双引号。

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

但我宁愿参数化查询使用PreparedStatement

这里是优点:从SQL注入

  • 避免
  • 并不需要使用单引号。

例如,

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

+1如果数据来自其他地方,准备好的语句就是这里的方法。 – 2013-03-04 09:52:50

+0

只是伟大的先生。我也尝试了\\\',\\',\'的所有组合,所有东西都返回给我SQL语法错误。它工作真棒 – 2015-02-11 06:33:33

4

在MySQL中,你使用''单个'在字符串中:

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

Link to docs

但是,只有当你从字面上提供的数据,如SQL脚本的pre - 使用您控制的数据填充表格等。如果您从外部源(例如最终用户或外部系统)接收到该字符串,那么您可能不会写文字,而是使用字符串变量。在这种情况下,您想使用准备好的语句作为JW. describes in his answer。为什么:http://xkcd.com/327/

2

你也可以使用"

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

除非,当然,您正在使用[ANSI引号](http://dev.mysql.com/doc/refman/5.6/en/server-sql-mode.html#sqlmode_ansi_quotes)。 – 2013-03-04 09:52:25

相关问题