Java PreparedStatement对空字符串参数使用两个单引号
我正在使用SQL的PreparedStatement
,如:
String sql = "insert into foo (a,b,c) values (?,?,?)";
ps = conn.prepareStatement(sql);
ps.setString(psIndex++, a);
ps.setString(psIndex++, b);
ps.setString(psIndex++, c);
但是,如果任何变量是空字符串,则结果语句会获得两个单引号。 如: VALUES ('foo','','')
然后我得到一个异常,因为两个单引号是一个转义序列。
我无法相信通过搜索我找不到任何东西,但我不能。 这里发生了什么?
由于OP不会执行@Adam在评论中提出的建议,我会这样做。 这对未来的读者很有用。 感谢@ user119179的想法。
这可能是我们使用的JDBC驱动程序中的一个错误 。 该驱动程序的提供者应该知道''
是一个转义序列。
实际上,更新驱动程序似乎解决了OP的缺陷。
如:VALUES('foo','','')然后我得到一个异常,因为两个单引号是一个转义序列。
这里有一个误解。 两个单引号是空字符串。 没有转义序列发生。 只有在另一个单引号中才会有转义报价。 如果您收到异常,可能是其他地方,例如数据库中列的限制。
该声明
insert into foo (a,b,c) values ('foo','','')
是非常有效的SQL。
@cyberkiwi是正确的。 可能是你的列不接受空值。 你有什么异常? 如果你有任何日志报告,然后分享。
链接地址: http://www.djcxy.com/p/4775.html上一篇: Java PreparedStatement using two single quotes for empty string parameter