2017-01-27 24 views
0

有沒有辦法只綁定預處理語句的幾個命名變量,然後創建一個部分綁定語句,然後通過填充剩餘的命名變量(例如從一個列表)創建多個綁定語句?如何創建datastax java驅動程序的BoudStatement的深層副本?

p = session.prepare("select a from b where c=? AND d=?") 
bound = p.bind("c", 1) 

l.map(v => bound.bind("d", l)) 

在上述最後一條語句,我想克隆「約束」每次這樣我就可以再使用executeAsync所有綁定的語句。

+1

你爲什麼不保持準備好的語句和綁定它在執行異步。這就是驅動程序的用意。 – phact

+0

綁定語句不是線程安全的。 – phact

+0

當前,如果我想使用executeAsync,看起來像我必須從預準備語句中獲得新的綁定語句。如果我做,l.map(V => bound.bind( 「d」,1))和executeAsync然後l1.map(V => bound.bind( 「d」,1))第一批製備陳述可能只有來自l2的值爲「d」。我的目標是找到克隆已部分綁定語句的方法。 – user2903819

回答

1

只需創建準備好的聲明中預定義值:

p = session.prepare("select a from b where c=1 AND d=?") 
l.map(v => bound.bind("d", l)) 

如果你沒有在編譯時知道價值c,動態創建語句字符串:

c=1 
p = session.prepare("select a from b where c=" + c + " AND d=?") 
l.map(v => bound.bind("d", l)) 

而且我不看重複綁定一個值的重大問題。它比克隆綁定語句更清晰。

+0

謝謝,但編譯時或編寫代碼時我不知道值'1'。它是動態的。我只是試圖避免一次又一次地寫入不必要的綁定。從功能角度來看,它會像部分功能一樣。 – user2903819

+0

@ user2903819,我已經更新了我的答案 –

相關問題