数据库引擎:HSQLDB(因为,它允许使用Java嵌入嵌入式应用程序数据库)
语言:Java 8(实际上是Groovy 3.0.2,但基本上是JRE)] >>
模式如下:
CREATE TABLE A ( START VARBINARY(16) NOT NULL, END VARBINARY(16) NOT NULL, ID BIGINT NOT NULL, COUNTRY VARCHAR(8), DESCRIPTION VARCHAR(256), PRIMARY KEY (START, END) );
START和END是编码为4或16个元素字节数组的IPv4或IPv6地址。
此代码中出现错误“ org.hsqldb.HsqlException:转换中的数据类型不兼容”(简化):
stmt.addBatch(a, b, c, d, e)
使用此“ upsert”插入表中尚不存在的数据时:
MERGE INTO A USING (VALUES ?,?,?,?,?) I (START, END, ID, COUNTRY, DESCRIPTION) ON (A.START = I.START AND A.END = I.END) WHEN MATCHED THEN UPDATE SET A.ID = I.ID, A.COUNTRY = I.COUNTRY, A.DESCRIPTION = I.DESCRIPTION WHEN NOT MATCHED THEN INSERT (START, END, ID, COUNTRY, DESCRIPTION) VALUES (I.START, I.END, I.ID, I.COUNTRY, I.DESCRIPTION)
[这里
a
和b
是byte[]
,c
是long
,d
和e
是Strings
,stmt
是BatchingPreparedStatementWrapper
。
[调试表明,stmt
变量认为语句的参数1和2(a
和b
)的类型为VARCHAR ...它们应该为VARBINARY(16)。
实际上,似乎认为所有参数都是VARCHAR。这似乎很奇怪。
我不认为我的SQL明显有问题,因为当我将START和END字段定义为VARCHAR时,它曾经可以正常工作。只是现在它们不是VARBINARY。
((我想要VARBINARIES的原因是允许在VARBINARY值之间进行数字样式比较。)
我的Google搜索没有发现任何相关内容,但也许有人可以提供线索?
数据库引擎:HSQLDB(因为,它允许使用Java嵌入应用数据库)语言:Java 8(实际上是Groovy 3.0.2,但基本上是JRE)架构如下:CREATE TABLE A(...
您在查询中显式cast()
输入参数是否起作用?