我有一个MySql表person_details
,其中包含p_id
和p_name
。现在,如果我想插入一条记录,其中p_name包含单引号'
,我会以这种方式执行它 -
insert into person_details values (1, 'D\'souza');
现在,我正试图通过这种方式通过java代码执行相同的操作 -
insert into person_details values (1, 'D\\\'souza');
我得到了MySQLSyntaxErrorException。
有什么不对吗?
答案 0 :(得分:11)
要直接回答您的问题,请将引号加倍。
insert into person_details values (1, 'D''souza');
但我更倾向于使用PreparedStatement
对参数进行参数化。
以下是PRO:
例如,
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');
但这仅适用于您按字面提供数据的情况,例如SQL脚本预先填充您控制的数据的表格等。如果您从外部源(最终用户)收到该字符串,例如,或外部系统)然后可能你不会写一个文字,而是使用字符串变量。在这种情况下,您希望将预准备语句用作JW. describes in his answer。为什么:http://xkcd.com/327/
答案 2 :(得分:2)
您也可以使用"
insert into person_details values (1, "D'souza");
答案 3 :(得分:2)
为什么不使用PreparedStatements
它还将处理SQL注入