2014-02-18 120 views
0

我在我的智慧结尾尝试测试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

+0

HSQLDB在双引号时保留“Group”情况。 INSERT语句必须对“Group”列名称进行双引号引用,在这种情况下它不会执行此操作。了解如何让Groovy使用正确的表单。 – fredt

+0

Groovy委托给HSQL,所以要更改表单,我必须在HSQLDB中找到一个让我控制列名区分大小写的设置。任何人都知道如何做到这一点? – pbuchheit

+0

结果fredt有正确的想法。问题不是这样,而是缺乏引号。一旦我添加了一些代码来将我的地图中的“Group”键用双引号括起来,问题就消失了。如果您将您的评论作为答案fredt发布,我会将其标记为解决方案。谢谢! – pbuchheit

回答

1

HSQLDB在双引号时保留“Group”情况。 INSERT语句必须对“Group”列名称进行双引号引用,在这种情况下它不会执行此操作。

create table INFO_GROUP("Group" varchar(2) not null primary key, VALUE varchar(3) null, 
    GROUP_DATE datetime null, COMMENT varchar(25) null) 

insert into INFO_GROUP ("Group", VALUE, GROUP_DATE, COMMENT) values ? , ? , ? ,? 

原来这字Group必须与在Groovy的地图双引号"Group"以产生正确的INSERT语句中使用。

相关问题