jt400 - jt400 将我的 where 条件截断为 like 子句
问题描述
我jt400-9.3.jar
用来连接 DB2/AS400。
我的表BAND
有这个记录:
+-----|------------------+
| MAT | NAME |
+-----|------------------+
|100 | Paul McCartney |
|101 | John Lennon |
|102 | Ringo Starr |
|103 | George Harrison |
我的桌子MUSICIAN
上有:
+------|------------------+
|MAT | NAME |
+------|------------------+
|1001 | Pete Best |
|1002 | Stuart Sutcliffe |
|1003 | Jimmy Nicol |
|1004 | Tommy Moore |
|1005 | Norman Chapman |
当我运行这个选择
SELECT t.mt, t.name
FROM (
SELECT
trim(b.mat) AS mat,
trim(b.name) AS name
FROM band b
WHERE trim(b.mat) = '1001'
UNION
SELECT
trim(m.mat) AS mat,
trim(m.name) AS name
FROM MUSICIAN m
WHERE trim(m.mat) = '1001'
) AS t
FETCH FIRST 1 ROWS ONLY
我检索:
+-----|----------------+
|MAT |NAME |
+-----|----------------+
|100 | Paul McCartney |
第一个查询作为like
子句工作。与1001
匹配100
,但句子为=
no like
。
当我在 dbeaver 中执行查询时,但在 java(使用 PreparedStatement)中我弄错了,驱动程序有一些配置吗?
解决方案
约翰·埃伯哈德(John Eberhard)对我的问题回答得如此之快。
https://sourceforge.net/p/jt400/bugs/121/
注册您的答案。
问题是查询中使用了 =。因为在查询中使用了 =,所以数据库告诉驱动程序类型是 CHAR(5)。然后驱动程序截断为 char 5。
有两种可能的解决方案。
向参数标记添加强制转换,以便更大的字符适合和错误比较。即 SELECT * FROM MYTABLE WHERE MAT = CAST( ? AS VARCHAR(80))
使用“查询替换截断参数”JDBC 属性。请参阅https://static.javadoc.io/net.sf.jt400/jt400/9.7/com/ibm/as400/access/doc-files/JDBCProperties.html
这是该属性的定义方式。
“查询替换截断参数”
指定应该用来代替 SQL 查询的截断参数的值。默认情况下,参数被静默截断为参数的长度。考虑以下场景。
表 T1 有一个名为 C1 的 CHAR(3) 列,以及一个 C1='ABC' 的行。应用程序使用 SELECT * FROM TABLE_X where C1=? 如果参数设置为“ABCD”,它将被静默截断为“ABC”,并且查询将返回一行。
此属性通过允许应用程序将字符串设置为应用程序中不存在的内容(即@@@@@@@)来避免此问题。空白值意味着该属性将被忽略。
推荐阅读
- javascript - TypeError: message.client.commands.get(...).execute 不是函数
- firebase - 由于此消息,无法创建 Firebase 索引此页面已移至新位置。请更新您的书签
- flutter - 如何在使用 FutureBuilder 对 prefixIcon 进行 onPressed 后更新 TextFormField 内容?
- flutter - 具有 setState 的类的 Flutter Update 属性
- elasticsearch - Elasticsearch 查询以获取数组大小
- amazon-dynamodb - DynamoDB 的服务器端超时(如果有)是多少?
- mysql - Sysbench测试Mysql但没有磁盘读取
- c# - c# winforms表单边框中带边框颜色的圆角边框
- reactjs - 如何一次从多个 url 获取数据 useffect 和 promise.all
- angular - StackBlitz ngcc 在启用 Ivy 的情况下无法在我的 npm 库上运行