2017-01-27 5 views
0

Есть ли способ связать только несколько именованных переменных подготовленного оператора и создать оператор частичной привязки, а затем создать из него несколько связанных операторов с заполнением оставшихся именованных переменных (например, из списка)?Как создать глубокую копию BoudStatement драйвера datastax java?

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

Почему бы вам не сохранить подготовленный оператор и связать его при выполнении async. Вот как должен использоваться драйвер. – phact

+0

Связанный оператор не является потокобезопасным. – phact

+0

В настоящее время, если я хочу использовать executeAsync, похоже, что я должен получить новый связанный оператор из подготовленного оператора. Если я должен был сделать, l.map (v => bound.bind ("d", l)) и executeAsync, а затем l1.map (v => bound.bind ("d", l)) первая партия подготовленных утверждения могут иметь значения от 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, я обновил свой ответ –