如何使用Java中的MySQL从字符串文字中删除单引号

时间:2013-03-04 09:46:37

标签: java mysql

我有一个MySql表person_details,其中包含p_idp_name。现在,如果我想插入一条记录,其中p_name包含单引号',我会以这种方式执行它 -

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

现在,我正试图通过这种方式通过java代码执行相同的操作 -

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

我得到了MySQLSyntaxErrorException。

有什么不对吗?

4 个答案:

答案 0 :(得分:11)

要直接回答您的问题,请将引号加倍。

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

但我更倾向于使用PreparedStatement对参数进行参数化。

以下是PRO:

  • 避免SQL注入
  • 不需要使用单引号。

例如,

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

答案 1 :(得分:4)

在MySQL中,您对字符串中的单个''使用'

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

Link to docs

但这仅适用于您按字面提供数据的情况,例如SQL脚本预先填充您控制的数据的表格等。如果您从外部源(最终用户)收到该字符串,例如,或外部系统)然后可能你不会写一个文字,而是使用字符串变量。在这种情况下,您希望将预准备语句用作JW. describes in his answer。为什么:http://xkcd.com/327/

答案 2 :(得分:2)

您也可以使用"

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

答案 3 :(得分:2)

为什么不使用PreparedStatements

它还将处理SQL注入