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

下一篇: Can I split a menu into multiple columns in WinForms?