java Oracle JDBC PreparedStatement忽略尾随空格
我目前正在编写一个与Oracle数据库接口的Java web应用程序。我使用PreparedStatements是因为Hibernate会使事情变得太复杂
由于程序中写入数据库的错误,我需要搜索的字段的值中写入了尾随空格。我用引号将该值括起来,以演示空格
"testFTP_receipt521 "
当我使用SQLDeveloper执行select查询时,我可以在运行时得到一个结果:
...and yfs_organization.ORGANIZATION_KEY='testFTP_receipt521';
(无空格)
但是,当我使用PreparedStatement时,我尝试以下操作时没有得到任何结果:
...and yfs_organization.ORGANIZATION_KEY=?");
preparedStatement.setString(1, "testFTP_receipt521");
(无空格)
当我尝试时:
...and yfs_organization.ORGANIZATION_KEY=?");
preparedStatement.setString(1, "testFTP_receipt521 ");
(带空格)
有什么方法可以用PreparedStatement查询这个结果,还是应该尝试另一种方法
谢谢你的帮助
# 1 楼答案
也许你可以这样使用它
这种方式会返回包含“testFTP_receipt521”的所有注册表,与空格无关
我在这部分代码中看到的另一件事
我觉得这是正确的方法
你需要在标准周围加上引号
# 2 楼答案
如果你有能力修改查询,你可以修剪(…)输入列值并执行比较。例如:
。。。和TRIM(yfs_organization.organization_KEY)=?”
希望有帮助
# 3 楼答案
也许,考虑到这种情况,如果Oracle的版本足够近,您可以考虑将一个virtual column添加到包含正确的EEM>值的表中吗?p>
然后在代码中,唯一的更改将是使用
ORGANIZATION_KEY_FIXED
查询数据库:(试穿一下http://sqlfiddle.com/#!4/8251d/1)
这样可以避免在应用程序中分散处理该bug所需的代码。一旦修复,可能会缓解过渡
作为一项附加功能,如果需要,您也可以在虚拟列上添加索引