2016-08-31 56 views
0

記錄我使用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

我看了看他們的樣品演示。我認爲你需要兩個不同的BoundStatement對象。

沒有這個,恐怕你最終可能會通過兩次相同的參考。這是在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); 

問候