我怎么知道该记录是重复的还是已成功插入?

man*_*ish 6 cql cassandra datastax-java-driver datastax

这是我的CQL表:

CREATE TABLE user_login (
    userName varchar PRIMARY KEY,
    userId uuid,
    fullName varchar,
    password text,
    blocked boolean
);
Run Code Online (Sandbox Code Playgroud)

我有这个datastax java驱动程序代码

PreparedStatement prepareStmt= instances.getCqlSession().prepare("INSERT INTO "+ AppConstants.KEYSPACE+".user_info(userId, userName, fullName, bizzCateg, userType, blocked) VALUES(?, ?, ?, ?, ?, ?);");

batch.add(prepareStmt.bind(userId, userData.getEmail(), userData.getName(), userData.getBizzCategory(), userData.getUserType(), false));


PreparedStatement pstmtUserLogin = instances.getCqlSession().prepare("INSERT INTO "+ AppConstants.KEYSPACE+".user_login(userName, userId, fullName, password, blocked) VALUES(?, ?, ?, ?, ?) IF NOT EXIST");

batch.add(pstmtUserLogin.bind(userData.getEmail(), userId, userData.getName(), passwordEncoder.encode(userData.getPwd()), false));
            instances.getCqlSession().executeAsync(batch);
Run Code Online (Sandbox Code Playgroud)

这里的问题是,如果我删除IF NOT EXIST所有工作正常,但如果把它放回去,它只是不在表中插入记录,也不会抛出任何错误.

那我怎么知道我要插入副本userName

我正在使用cassandra 2.0.1

Oli*_*lat 12

使用INSERT... IF NOT EXISTS,然后您可以使用ResultSet#wasApplied()来检查结果:

ResultSet rs = session.execute("insert into user (name) values ('foo') if not exists");
System.out.println(rs.wasApplied());
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 此CQL查询是一个轻量级事务,具有性能影响.有关更多信息,请参阅此文章.
  • 您的示例只有一个语句,您不需要批处理