2017-01-27 2 views
0

準備されたステートメントの名前付き変数をいくつかバインドして部分的にバインドされたステートメントを作成し、後で複数のバインドステートメントを作成して残りの名前付き変数(リストなど)を埋め込む方法はありますか?上記の最後の文でdatastax java driverの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"、l))とexecuteAsyncを実行し、次にl1.map(v => bound.bind( "d"、l)ステートメントはl2の値を "d"として持つことができます。私の目標は、すでに部分的にバインドされたステートメントをクローンする方法を見つけることです。 – user2903819

答えて

1

ただ、事前に定義された値でプリペアドステートメントを作成する:あなたは、コンパイル時に値cを知って動的文の文字列を作成しない場合

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

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

を私は見ていません1つの値を何度も何度も繰り返しバインドしてしまう大きな問題。クローンバインドされたステートメントよりはるかに明確な解決策です。

+0

ありがとうございますが、コンパイル時やコードを書く時に値 '1'がわかりません。それは動的です。私は、不要なバインドを何度も繰り返し書くことを避けようとしているだけです。機能的な観点からは、部分的な機能のようなものになります。 – user2903819

+0

@ user2903819、回答を更新しました –

関連する問題