更新查询不使用OrientDB中的eval()函数和参数

时间:2014-11-25 11:09:53

标签: java orientdb

在我的项目中,我正在使用Orientdb,在更新查询中存在一些问题。

int amt = 100;
int recordsUpdated = db.command(new OCommandSQL("update A set id = eval('id - "+ amt +"') where eval('id - "+amt+"') > 0")).execute();

这很好用。但是,

int recordsUpdated = db.command(new OCommandSQL("update A set id = eval('id - ?') where eval('id - ?') > 0")).execute(100,100);

Map<String,Object> params = new HashMap<String,Object>();
params.put("amt", "100");
int recordsUpdated = db.command(new OCommandSQL("update A set id = eval('id - :amt') where eval('id - :amt') > 0")).execute(params);

无效。 请帮我做工作。

1 个答案:

答案 0 :(得分:2)

变量的替换在SQL中无处不在,特别是在字符串内部。您可以像第一个示例中那样连接值,或者尝试使用上下文变量,例如:

OCommandSQL cmd = new OCommandSQL("update A set id = eval('id - $id') where eval('id - $id') > 0");
cmd.getContext().setVariable( "id", 100 );
int recordsUpdated = db.command(cmd).execute();