6

我有一个 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

4 回答 4

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();
于 2013-03-04T09:50:24.417 回答
4

在 MySQL 中,您可以在字符串中使用''单个:'

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

链接到文档

但这仅适用于您按字面意思提供数据时,例如使用您控制的数据预填充表的 SQL 脚本等。如果您从外部源(例如最终用户,或外部系统)那么大概您不会编写文字,而是使用字符串变量。在这种情况下,您希望将准备好的语句用作JW。在他的回答中描述。为什么:http: //xkcd.com/327/

于 2013-03-04T09:47:19.180 回答
2

你也可以使用"

insert into person_details values (1, "D'souza");
于 2013-03-04T09:49:53.023 回答
2

为什么不使用PreparedStatements

它还将处理 SQL 注入

于 2013-03-04T09:50:58.270 回答