我在我的智慧结尾尝试测试groovy sql查询。这个想法是使用groovy来执行一个sql查询,它将从旧MS SQL数据库中提取一些数据,并以我的应用程序可以使用的格式返回它。编写groovy脚本很简单,但测试它是另一回事。目前我正在使用超音速创建一个用于测试的内存数据库。当我的测试运行时,我创建了一个表并尝试用xml文件中的一些测试数据填充它。表创建工作正常,但数据插入失败:“用户缺少权限或找不到对象:GROUP”。HSQL中区分大小写的列名称
问题似乎是,hsql正在将我所有的列名转换为大写。因此,即使实际的列名称是“Group”,它也将被转换为“GROUP”用于插入语句。 GROUP与组关键字冲突,因此查询失败。
我已经在传统数据库在列名没有控制,所以我需要某种解决办法的。有没有办法配置hsql来防止列名转换?
更新: 下面是一些示例代码,显示我试图在常规的事:
首先我有一个在测试DB
Sql remoteDB;
...
remoteDB.execute(
"""create table INFO_GROUP(
"Group" varchar(2) not null primary key,
VALUE varchar(3) null,
GROUP_DATE datetime null,
COMMENT varchar(25) null
)""");
创建表的初始化方法一旦创建表格,我就从xml文件中解析出一些数据并将其注入到我创建的表格中:
groovy.sql.DataSet set = remoteDB.dataSet(tableName);
Node n = it;
Map<String,Object> m = n.attributes() ;
assert(set!=null);
set.add(m);
我看到的问题是我称为set.add(m)的最后一行。我得到一个错误:
Failed to execute: insert into INFO_GROUP (Group, VALUE, GROUP_DATE, COMMENT) values (?, ?, ?, ?) because: user lacks privilege or object not found: GROUP
HSQLDB在双引号时保留“Group”情况。 INSERT语句必须对“Group”列名称进行双引号引用,在这种情况下它不会执行此操作。了解如何让Groovy使用正确的表单。 – fredt
Groovy委托给HSQL,所以要更改表单,我必须在HSQLDB中找到一个让我控制列名区分大小写的设置。任何人都知道如何做到这一点? – pbuchheit
结果fredt有正确的想法。问题不是这样,而是缺乏引号。一旦我添加了一些代码来将我的地图中的“Group”键用双引号括起来,问题就消失了。如果您将您的评论作为答案fredt发布,我会将其标记为解决方案。谢谢! – pbuchheit