2016-08-31 6 views
0

に1つのレコードのみを挿入している私は、DataStaxのJavaドライバーバッチがカサンドラ

ここ
  PreparedStatement pstmt = cqlSession.prepare("INSERT INTO ks_mobapp.messages(pair_id, date, belong_to, message_id, text, sender) VALUES(?, ?, ?, ?, ?, ?);"); 
      BoundStatement boundStatement = new BoundStatement(pstmt); 
      BatchStatement batchStmt = new BatchStatement(); 
      batchStmt.add(boundStatement.bind(pair, formatDate, pairSplit[0], obj.getLong("time"), text, sndrId)); 
      batchStmt.add(boundStatement.bind(pair, formatDate, pairSplit[1], obj.getLong("time"), text, sndrId)); 
      cqlSession.execute(batchStmt); 

pairSplit[0] & pairSplit[1]を使用してこのコードを持っている異なっているが、最後に一つだけの行が挿入されます。

彼女は、私が彼らのサンプルのデモを見

CREATE TABLE messages (
    pair_id text, 
    date text, 
    message_id bigint, 
    text text, 
    sender text, 
    belong_to text, 
    PRIMARY KEY((pair_id, date, belong_to), message_id) 
); 

答えて

1

私のテーブルです。私はあなたが2つの異なるBoundStatementオブジェクトを必要と思う。

これがなければ、あなたは同じ参照を2回渡してしまった可能性があります。これはJavaでの作業の通常の方法です(オブジェクトを深くコピーすることは避けます)。

0

同じBoundStatementを上書きしています。これは動作します:

 PreparedStatement pstmt = cqlSession.prepare("INSERT INTO ks_mobapp.messages(pair_id, date, belong_to, message_id, text, sender) VALUES(?, ?, ?, ?, ?, ?);"); 
     BatchStatement batchStmt = new BatchStatement(); 
     batchStmt.add(new BoundStatement(pstmt).bind(pair, formatDate, pairSplit[0], obj.getLong("time"), text, sndrId)); 
     batchStmt.add(new BoundStatement(pstmt).bind(pair, formatDate, pairSplit[1], obj.getLong("time"), text, sndrId)); 
     cqlSession.execute(batchStmt); 

よろしく