gpt4 book ai didi

java - 在 WHERE 子句中使用字符串条件查询时,PostgreSQL JDBC 为空结果集

转载 作者:行者123 更新时间:2023-11-29 13:21:49 24 4
gpt4 key购买 nike

在使用 Postgres JDBC 时,我遇到了有关字符串查询的问题。以下查询使用 Auqadata Studio 等工具,但不使用代码。

代码如下;

// strSqlStatement is passed from a framework as String like this and executed untouched
strSqlStatement = "SELECT columnA FROM abc.table1 WHERE columnB= '%KLMN%' limit 1;";
...
strDBUrl = "jdbc:postgresql://x.x.x.x:1234/instance?useUnicode=yes&characterEncoding=UTF-8";
...
rs = st.executeQuery(strSqlStatement);

在 Postgres 数据库中,列 B 的记录为;

... ColumnA    ...      ColumnB             ...   ColumnC
------- ------- -------
value1 | TEST_AA_KLMN_BB_S | 25
value2 | TEST2_AA_KLMN_BB_S | 79
value3 | TEST3_AA_KLMN_BB_S | 124

问题是这样的,通常使用 WHERE 子句作为 ColumnB = 'TEST2_AA_KLMN_BB_S' 查询 value2 应该有效,但这个简单的查询无效。同样 LIKE 子句作为 ColumnB LIKE '%KLMN%' 根本不起作用。

WHERE子句使用ColumnC等其他列没有问题。

我已经检查过我们的 Postgres 数据库没有语言环境设置(lc_ctype=C)并且数据库的编码是 UTF-8(server_encoding=UTF8)。

背景;

  • 此代码片段存在于独立的可执行 jar 文件中。
  • ColumnB 的数据类型是 varchar(64)。
  • Java 1.7(也尝试使用 1.8 和 1.6)。
  • JDBC 是 postgresql-9.4.1211.jre6(也试过 7 和 8)。

编辑:@Francisco Puga,我错误地写了 WHERE columnB= '%KLMN%' 问题,在实际代码中它是正确的 WHERE columnB LIKE '%KLMN%',不过谢谢感谢您的快速回复。

我已经缩小了问题范围。我发现 =LIKE 确实有效,但字符串存在限制问题。

如果比较的字符串短于 25 个字符,一切都很好,但是当比较的字符串长于 25 个字符时,结果为空。实际上 25 个字符对我来说没有意义。

最佳答案

不确定这是不是打字错误,但您的 where 子句是:

WHERE columnB= '%KLMN%'

什么时候应该:

WHERE columnB LIKE '%KLMN%'

如果您想忽略大写字母,甚至可以使用 ILIKE

还要考虑到,如果您在列名中使用大写字母,则在进行查询时应该在其周围使用双引号(但如果这是问题所在,它应该会抛出错误,而不是空记录集)

SELECT "ColumnA" FROM abc.table1 WHERE "ColumnB" ILIKE '%KLMN%' limit 1;

关于java - 在 WHERE 子句中使用字符串条件查询时,PostgreSQL JDBC 为空结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40396746/

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