为什么我的合并(更新)在使用VARBINARY字段时在HSQLDB数据库中由于类型不匹配而失败?

问题描述 投票:0回答:1

数据库引擎: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)

[这里abbyte[]clongdeStringsstmtBatchingPreparedStatementWrapper

[调试表明,stmt变量认为语句的参数1和2(ab)的类型为VARCHAR ...它们应该为VARBINARY(16)。

实际上,似乎认为所有参数都是VARCHAR。这似乎很奇怪。

我不认为我的SQL明显有问题,因为当我将START和END字段定义为VARCHAR时,它曾经可以正常工作。只是现在它们不是VARBINARY。

((我想要VARBINARIES的原因是允许在VARBINARY值之间进行数字样式比较。)

我的Google搜索没有发现任何相关内容,但也许有人可以提供线索?

数据库引擎:HSQLDB(因为,它允许使用Java嵌入应用数据库)语言:Java 8(实际上是Groovy 3.0.2,但基本上是JRE)架构如下:CREATE TABLE A(...

sql jdbc hsqldb
1个回答
0
投票

您在查询中显式cast()输入参数是否起作用?

© www.soinside.com 2019 - 2024. All rights reserved.