gpt4 book ai didi

java - Oracle JDBCPreparedStatement 忽略尾随空格

转载 作者:行者123 更新时间:2023-12-01 12:26:36 25 4
gpt4 key购买 nike

我目前正在编写一个与 Oracle 数据库交互的 Java Web 应用程序。我正在使用PreparedStatements,因为Hibernate 会使事情变得太复杂。

由于写入数据库的程序中存在错误,我需要搜索的字段的值中写入了尾随空格。我用引号将该值括起来以展示空格。

"testFTP_receipt521      "

当我使用 SQLDeveloper 执行选择查询时,运行时可以获得结果:

...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查询此结果,或者我应该尝试其他方法吗?

感谢您的帮助。

最佳答案

Due to a bug in the program which is writing to the database, the field I need to search for has trailing spaces

也许,考虑到具体情况,并且如果您的 Oracle 版本足够新,您可以考虑添加 virtual column到包含正确值的表?

ALTER TABLE yfs_organization ADD (
ORGANIZATION_KEY_FIXED VARCHAR(80)
GENERATED ALWAYS AS (TRIM(ORGANIZATION_KEY)) VIRTUAL
);

然后在您的代码中,唯一的更改是使用 ORGANIZATION_KEY_FIXED 来查询数据库:

SELECT ID,ORGANIZATION_KEY_FIXED
FROM yfs_organization
WHERE ORGANIZATION_KEY_FIXED='testFTP_receipt521'

(在 http://sqlfiddle.com/#!4/8251d/1 上试试)

这可能会避免将解决该错误所需的代码分散在您的应用程序中。一旦修复,可能会简化过渡。

作为一个额外的好处,如果您也需要,您可以在虚拟列上添加索引。

关于java - Oracle JDBCPreparedStatement 忽略尾随空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26282857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com