我使用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)
);
答案 0 :(得分:1)
我看了他们的示例演示。我认为你需要两个不同的 BoundStatement 对象。
没有它,我担心,你可能最终两次通过相同的参考。这是java中常用的工作方式(我们避免深度复制对象)。
答案 1 :(得分: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);
此致