2014-11-25 49 views
1

在我的項目中,我使用Orientdb,更新查詢中出現了一些問題。更新查詢不適用於OrientDB中的eval()函數和參數

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); 

不工作。 請幫我做工作。

回答

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();